templates - How to refer to a doubly-templated free function in C++ -
i have templated class within define free functions taking references templated class. these free functions templated on different parameter.
from outside class can call free functions. however, cannot find correct syntax 1 free function call another.
quick example:
template<typename t> class foo { template<typename s> friend s f(const foo &) { return s(); } template<typename s> friend s g(const foo &s) { return f(s); // see below, when instantiated, yields 'no matching function call f(const foo &)' } }; float test1() { foo<int> o; return f<float>(o); // compiles } float test2() { foo<int> o; return g<float>(o); // fails compile line above errors } (c.f. this link too)
it seems point of call f(s) within g(), outermost template has been lost. how might re-specify t in call f? have checked on gcc4.7, 4.8, clang 3.2 equivalent errors.
when call f(s) need specify template parameter s because can't deduced argument s.
but if change f<s>(s) (assuming meant call same template argument s g called with) inhibit adl, , way friend function defined @ class scope can found adl. need add declaration of f global namespace, call in g can find it.
so make work need add these declarations before foo
template<typename t> class foo; template<typename s, typename t> s f(const foo<t> &); template<typename s, typename t> s g(const foo<t> &); and change call in g f<s>(s) or else f<x>(s)
Comments
Post a Comment