It looks like it's working find with gcc-2.95.3-5.
One thing, though, it gave me a compiler error when I
didn't #include <typeinfo>. Since you didn't list
which header files you're including, I'm not sure if
you're including <typeinfo> or not and what the
Borland's behaviour would be if you didn't.
Noel
--- hicks
Hello
I have some questions for you: 1. Why are you so interested in the value of "typeid.name()"?
I'm not particulary interested in typeid::name() as an end result. As I said in the letter, I have real task at hand, and condensed the code so that anybody looking at it would be able to get to the point quickly. I used typeid()::name() here as a means of demonstating the problem. The result which is shown by typeid()::name() corresponds to the result encountered in the real task, namely, the next stage of processing is supposed to take place in traits1
but takes place in traits1 instead. In other words, the branching mechanism fails silently. 2. Are you sure this isn't a compiler problem? What compiler(s) have you tried this on?
Borland Builder C++ 5. Unfortunately, it's the only one to which I have access now. It could well be a compiler problem. Unless there are some rules which I don't understand. If it is a compiler problem perhaps someone knows of a workaround. I have tried various approaches to no avail.
Craig Hicks
Noel Yap wrote:
--- hicks
mailto:hicks@kgk.co.jp wrote: Query regarding the use/limitiations of traits in metaprogramming
I am trying to use traits pattern to assist in metaprogramming. I have the following problem.
A traits class "trait" defers a decision to another traits class "trait1" depending on the result of a third traits class "traita". However, the compiler does not cooperate. The code below excutes but gives unexpected output (also shown).
[Note:: The code has been reduced to the minimal to demonstrate the problem. I have a real task at hand not shown here.]
template <class T> struct traita { BOOST_STATIC_CONSTANT(int, value=0); }; template <> struct traita<int> { BOOST_STATIC_CONSTANT(int, value=1); };
template
struct trait1 {}; template <class T> struct trait { BOOST_STATIC_CONSTANT(int, value=traita<T>::value); typedef trait1< ;T, value> t1; };
int main(int argc, char* argv[]) { std::cout << typeid(trait<int>::t1).name() << std::endl << trait<int>::value << std::endl ; return 0; }
output::
trait1
1 It would be nice if the first line of output were "trait1
", but it isn't. Any assistance would be greatly appreciated.
I have some questions for you: 1. Why are you so interested in the value of "typeid.name()"? 2. Are you sure this isn't a compiler problem? What compiler(s) have you tried this on?
Noel
__________________________________________________ Do You Yahoo!? Yahoo! Health - your guide to health and wellness http://health.yahoo.com
Info: http://www.boost.org Wiki:
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl
Unsubscribe: mailto:boost-users-unsubscribe@yahoogroups.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
[Non-text portions of this message have been removed]
------------------------ Yahoo! Groups Sponsor
Info: http://www.boost.org Wiki:
http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl
Unsubscribe: mailto:boost-users-unsubscribe@yahoogroups.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
__________________________________________________ Do You Yahoo!? Yahoo! Health - your guide to health and wellness http://health.yahoo.com