Boost logo

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