
Markus Schoepflin wrote:
Both my compiler (Tru64 CXX 7.1) and Comeau C++ Online think this code is in error:
You see the error because you compile in strict ansi mode which enables "strict dependent name lookup rules to be used in templates". It is the same with all EDG-based compilers: cxxosf.zko.hp.com> eccp -c --no_dep_name --version m.cpp Edison Design Group C/C++ Front End, version 3.5 (Dec 20 2004 13:57:48) Copyright 1988-2004 Edison Design Group, Inc. cxxosf.zko.hp.com> eccp -c --dep_name --version m.cpp Edison Design Group C/C++ Front End, version 3.5 (Dec 20 2004 13:57:48) Copyright 1988-2004 Edison Design Group, Inc. "m.cpp", line 4: error: identifier "make_foo" is undefined template <class T> foo(T t) { *this = make_foo(t); } ^ detected during instantiation of "foo::foo(T) [with T=int]" at line 9 1 error detected in the compilation of "m.cpp". cxxosf.zko.hp.com>
Therefore I think this should be changed to the following:
Another way of fixing it, the one that does not involve explicit specialization, can be defining foo's template ctor after make_foo() has been defined (or declared): ---%<--- struct foo { foo() {} template <class T> foo(T); }; inline foo make_foo(int i) { return foo(); } template <class T> foo::foo(T t) { *this = make_foo(t); } foo f(42); --->%--- Thanks, Boris ----- Original Message ----- From: "Markus Schöpflin" <markus.schoepflin@comsoft.de> To: <boost@lists.boost.org> Sent: Thursday, September 20, 2007 5:52 AM Subject: [boost] [system] Possible error in error_code.hpp
Hello,
this file contains code to create an error condition, which basically looks like this:
---%<--- struct foo { foo() {} template <class T> foo(T t) { *this = make_foo(t); } };
inline foo make_foo(int i) { return foo(); }
foo f(42); --->%---
Both my compiler (Tru64 CXX 7.1) and Comeau C++ Online think this code is in error:
---%<--- cxx: Error: test.cxx, line 4: identifier "make_foo" is undefined detected during instantiation of "foo::foo(T) [with T=int]" at line 9 template <class T> foo(T t) { *this = make_foo(t); } ----------------------------------------^ --->%---
Therefore I think this should be changed to the following:
---%<--- struct foo; template <class T> foo make_foo(T);
struct foo { foo() {} template <class T> foo(T t) { *this = make_foo(t); } };
template<> foo make_foo(int i) { return foo(); }
foo f(42); --->%---
Is this correct? If yes, could that header be fixed?
TIA, Markus
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost