我正在尝试寻找以下困境的替代方案。你知道当你有一个带有默认模板参数的模板类/函数时,即使它们是空的,你也必须应用尖括号?这是我进行修复的尝试。我知道我可以使用简单的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>