|
Boost : |
From: Brian McNamara (lorgon_at_[hidden])
Date: 2004-02-20 17:04:04
On Fri, Feb 20, 2004 at 04:03:57PM -0500, David Abrahams wrote:
> Simple: specializations that follow the point of instantiation aren't
> considered. This program exits with an error:
>
> template <class T>
> int f(T) { return 1; }
>
> int main() { return ::f(0); }
>
> template <> int f(int) { return 0; }
Aha; this is part of what I was missing.
This clears most of it up for me.
One last question, and then I think I'm done. In my example:
namespace lib {
template <class T> void f(T) { /* print "bar" */ }
template <class T> void g(T x) { lib::f(x); } // (1)
}
namespace user {
struct MyClass {};
}
namespace lib {
template <> void f( user::MyClass ) { /* print "foo" */ }
}
int main() {
user::MyClass m;
lib::g(m); // (2)
}
What is printed?
(I think this question comes down to whether or not (1) or (2) is the
"point of instantiation" of f(), yes?)
-- -Brian McNamara (lorgon_at_[hidden])
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk