1// { dg-do assemble } 2 3// Submitted by Erez Louidor Lior <s3824888@techst02.technion.ac.il> 4 5template <typename> class H; 6template <typename Target, typename Source> 7H<Target> foo(const H<Source>&); 8 9template <typename Type> 10class H{ 11 12#ifdef OK 13public: 14#endif 15 template<template<class, class> class Caster, typename Source> 16 static H<Type> cast(const H<Source>& s); 17 18#ifndef OK 19 template <typename Target, typename Source> 20 friend H<Target> foo(const H<Source>&); 21#endif 22 23}; 24 25template <class, class> class caster; 26 27template <typename Target, typename Source> 28H<Target> foo(const H<Source>& s){ 29 return H<Target>::template cast<caster, Source>(s); 30} 31 32int main(){ 33 H<int> i; 34 foo<const int>(i); 35} 36