Boost logo

Boost Users :

Subject: Re: [Boost-users] [MPL] has_xxx always returns false!
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2010-08-25 21:58:19


AMDG

Eric wrote:
> This code:
>
> BOOST_MPL_HAS_XXX_TRAIT_DEF(normal);
> <snip>
>
> if I understand correctly, this code is suppose to do call a different
> "getNormal" method if the method "normal" exists (or not) in the template
> parameter class.
>
> Basically mimicking the infamous "__if_exists" macro on the Microsoft c++
> compiler.... right?
>
> but, has_normal<VT> always return false (visual studio 2008) so we don't get the
> right expected behavior!
>

has_normal checks for a nested *type* called normal,
not for a member function.

#include <boost/mpl/has_xxx.hpp>
#include <boost/mpl/assert.hpp>

BOOST_MPL_HAS_XXX_TRAIT_DEF(normal);

struct test1 {};
struct test2 { typedef void normal; };
struct test3 { int normal(); };

int main() {
    BOOST_MPL_ASSERT_NOT((has_normal<test1>));
    BOOST_MPL_ASSERT((has_normal<test2>));
    BOOST_MPL_ASSERT_NOT((has_normal<test3>));
}

In Christ,
Steven Watanabe


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