Boost logo

Boost Users :

From: Sam Gentile (ManagedCode_at_[hidden])
Date: 2002-11-13 10:01:24


Hope this answers your question,
Aleksey

 

I'm sorry, no I still don't understand. Could you please say more?

 

Sam Gentile

.NET Consultant

ManagedCode_at_[hidden]

http://www.samgentile.com

http://radio.weblogs.com/0105852/

 

-----Original Message-----
From: Aleksey Gurtovoy [mailto:alexy_at_[hidden]]
Sent: Wednesday, November 13, 2002 3:19 AM
To: 'Boost-Users_at_[hidden]'
Subject: RE: [Boost-Users] A strange question-)

 

Sam Gentile wrote:
> I went there and indeed it can't get any simpler - at least
> in theory-)
> Read the document
> C:\Boost\boost_1_29_0\libs\type_traits\c++_type_traits.htm
> and its quite
> simple:
>
> template <typename T>
> struct is_void
> { static const bool value = false; };
>
> template <>
> struct is_void<void>
> { static const bool value = true; };
>
> That's exactly what I want to show. So I go to the header files and
> instead:
>
> //* is a type T void - is_void<T>
>
> BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,false)
>
> BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void,true)
>
>
>
> Huh? So I look in bool_trait_def.hpp:
>
> #define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \
>
> template< typename T > struct trait \
>
> : mpl::bool_c< C > \
>
> { \
>
> BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
>
> BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
>
> }; \

Well, the original code doesn't have all these excessive newlines ;),
but
yes, basically that's how it's implemented.

> Argh! Why is it done like this? This makes it much more
> complicated and unreadable than it has to be. Why are macros
> being used everywhere?

Practical engineering matters. If you consider that the fact that there
are
~60 trait templates in the library and every time when a new version of
a
compiler comes out, or when somebody starts porting the library to a new
platform, there is a chance that you need to change half of those
definitions, from, for instance,

    template <typename T>
    struct is_void
        : mpl::bool_c<false>
    {
    };

to

    template <typename T>
    struct is_void
    {
        BOOST_STATIC_CONSTANT(bool, value = false);
        typedef mpl::bool_c<value> type;
    };

it might all make sense, after all :). Something along the lines of both
of
the above scenarios has actually happened, a couple of times. It's not
the
whole picture yet, but IMO it's enough of the motivation already, so I
won't
go too deep into details :).

Hope this answers your question,
Aleksey

Info: <http://www.boost.org>
Wiki: <http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl>
Unsubscribe: <mailto:boost-users-unsubscribe_at_[hidden]>

Your use of Yahoo! Groups is subject to the Yahoo!
<http://docs.yahoo.com/info/terms/> Terms of Service.

[Non-text portions of this message have been removed]


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net