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>
。なぜそうなのか、どうすれば自分の望むことを達成できるのでしょうか。