我有一个应该允许void
作为模板参数的模板类。这个类确实有一个传递参数引用的函数,所以我做了以下事情:
template <typename T>
struct trait
{
typedef typename boost::conditional<
boost::is_void<T>::value,
void, T &
>::type type;
};
template <typename T>
struct foo
{
typename trait<T>::type ref()
{
// do something
}
};
然而编译器声称我会void
在struct trait<void>
. 为什么会这样,我怎样才能实现我想要的?