【发布时间】:2012-12-09 10:04:52
【问题描述】:
我正在尝试检查模板参数是否存在默认构造函数。 我想做这样的事情:
template <typename A>
class Blah
{
Blah() { A* = new A(); }
}
但我想在编译时通过 SFINAE 或其他技巧检测该构造函数是否存在,如果不存在,则提出我自己的 static_assert。
当我的类(如std::vector)没有“默认构造函数”但具有默认参数的构造函数时,就会出现问题。
所以使用std::has_trivial_default_constructor 不会返回true。虽然我可以使用new vector<T>()。
【问题讨论】:
-
那
std::is_default_constructible还不行吗? -
在 VS2010 中不存在......此外,如果有默认构造函数,它被定义为返回 true。例如哪个向量没有,但可以不带参数构造。
-
拥有所有默认参数仍使其成为默认构造函数。 GCC 4.7.2 说
std::vectoris default-constructible.
标签: c++ templates constructor sfinae