|
Boost Users : |
Subject: [Boost-users] MPL if_ not following true branch
From: Cory Nelson (phrosty_at_[hidden])
Date: 2009-05-18 03:33:10
This code doesn't seem to ever follow the true branch of the if_...
it's like the eval_if is clobbering it. Can someone tell me what I'm
doing wrong (other than not using a map.. this is a reduction of some
other code that can't use a map)?
#include <iostream>
#include <typeinfo>
#include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/static_assert.hpp>
template<typename T>
struct choose_type
{
struct int_tag {};
struct float_tag {};
template<typename InvalidT>
struct invalid_type_specified
{
BOOST_STATIC_ASSERT(sizeof(InvalidT) == 0);
};
typedef typename boost::mpl::if_<
boost::is_same<T, int>,
int_tag,
typename boost::mpl::eval_if<
boost::is_same<T, float>,
boost::mpl::identity<float_tag>,
invalid_type_specified<T>
>::type
>::type type;
};
int main()
{
std::cout << typeid(choose_type<int>::type).name() << std::endl;
return 0;
}
-- Cory Nelson
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