【发布时间】:2017-01-11 14:36:10
【问题描述】:
所以我将其归结为最小、完整、可验证的示例,似乎 Visual Studio 2015 不允许我在 enable_if 中使用模板化的 constexpr 函数。
例如:
template <typename T>
constexpr bool condition() { return sizeof(T) > 1; }
给我错误:
错误 C2995:
enable_if<_Test,T>::type test(void): 函数模板已定义
当我尝试在替换中使用它时,失败不是这样的错误编译:
template <typename T>
enable_if_t<condition<T>()> test() { cout << "true\n"; }
template <typename T>
enable_if_t<!condition<T>()> test() { cout << "false\n"; }
这在 gcc 中运行良好:http://ideone.com/m9LDdS
如果我删除 condition 的模板化,它在 Visual Studio 2015 中可以正常工作。我相信constexpr函数是在c++11中引入的,为什么Visual Studio 2015不支持这个?它是一个错误吗?
【问题讨论】:
-
constexpr函数实际上是在 C++11 中引入的。 -
msdn.microsoft.com/en-us/library/hh567368.aspx 他们不支持扩展的 constexpr FWIW。
-
@JonathanMee 我可以通过使用模板结构作为代理为您提供一种解决方法。 rextester.com/TGMB94634
-
@JonathanMee 适用于您的示例的解决方法:rextester.com/ULDFM22040
标签: c++11 c++ c++11 templates visual-studio-2015 constexpr