C++ 使用mpl::if\和整数模板参数选择类型

C++ 使用mpl::if\和整数模板参数选择类型,c++,templates,boost,boost-mpl,C++,Templates,Boost,Boost Mpl,以下代码在Visual Studio 2005上工作,但在使用g++4.4.5编译时给我一个编译器错误: #include <boost/mpl/if.hpp> #include <boost/mpl/bool.hpp> template<int X> struct A { void f() { typedef boost::mpl::if_<boost::mpl::bool_<X == 1>, int, bool&

以下代码在Visual Studio 2005上工作,但在使用g++4.4.5编译时给我一个编译器错误:

#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>

template<int X> struct A
{
    void f() {
        typedef boost::mpl::if_<boost::mpl::bool_<X == 1>, int, bool>::type Type;
    }
};
#包括
#包括
模板结构A
{
void f(){
typedef boost::mpl::if_u2;::type;
}
};
这是我得到的错误:

main.cpp: In member function ‘void A<X>::f()’:
main.cpp:12: error: too few template-parameter-lists
main.cpp:在成员函数“void A::f()”中:
main.cpp:12:错误:模板参数列表太少
代码怎么了?如果我用一个硬编码的数字替换模板化的X,代码就可以正常编译。我也尝试过用mpl::int_uu类型包装X,但没有成功


谢谢

您需要
typename
关键字:

typedef typename                   // <-- Here
    boost::mpl::if_<
        boost::mpl::bool_<X == 1>,
        int,
        bool
    >::type Type;
因此,您需要明确地告诉编译器,
::type
typename
关键字表示类型


请参阅此处的详细说明:。

您能否发布一个完整的示例(如中所述)?
//Silly if_ specialization
template <typename Then, typename Else>
struct if_<void, Then, Else>
{
    int type;
};