次のジレンマの代替案を探しています。デフォルトのテンプレート引数を持つテンプレート クラス/関数があり、空の場合でも山かっこを適用する必要がある場合の方法を知っていますか? これは私の修正の試みです。単純なtypedef
( typedef X<> L
) を使用できることはわかっていますが、クラスを参照するために別の名前を使用したくありません。
そこで、次のことを試しました。しかし、何らかの理由で、テンプレート引数に型を指定しても機能しません。何故ですか?
#include <type_traits>
template <typename = void> struct X {};
template <typename T = void>
using L = typename std::conditional<
std::is_void<T>::value,
X<>,
X<T>
>::type;
int main()
{
L l;
}
エラー:
prog.cpp: 関数 'int main()' 内:
prog.cpp:10:7: エラー: 'l' の前にテンプレート引数がありません<br> prog.cpp:10:7: エラー: 予期される ';' 'l' の前<br>