// Build don't link:

// Submitted by Erez Louidor Lior <s3824888@techst02.technion.ac.il>

template <typename> class H;
template <typename Target, typename Source>
H<Target> foo(const H<Source>&);

template <typename Type>
class H{

#ifdef OK
public:
#endif
  template<template<class, class> class Caster, typename Source>
  static H<Type> cast(const H<Source>& s);

#ifndef OK
  template <typename Target, typename Source>
  friend H<Target> foo(const H<Source>&);
#endif

};

template <class, class> class caster;

template <typename Target, typename Source>
H<Target> foo(const H<Source>& s){
  return H<Target>::template cast<caster, Source>(s);
}

int main(){
  H<int> i;
  foo<const int>(i);
}
