VS2015-preview:noexcept表达式评估失败

时间:2015-01-28 04:34:01

标签: templates c++11 variadic-templates visual-studio-2015 noexcept

我在VS2015预览中尝试了代码时遇到了这个问题。似乎MSVC在评估noexcept表达式时遇到问题并导致下面的错误消息。我通过将noexcept表达式提升到一个将结果传递给继承的integral_constant的包装器结构来解决这个问题。

我做了一些搜索,但我找不到任何记录这个与MSVC有关的问题。我非常有信心这是可移植代码,因为libc ++将这种模式用于其type_traits实现。 MSVC使用编译器内在函数实现此type_trait的版本。

如果有人在我记录Microsoft的错误之前有任何见解,那就很好奇。

#include <type_traits>

using namespace std;

template<typename T, typename... Args>
struct is_nothrow_constructible_custom
    : public integral_constant<bool, noexcept(T(declval<Args>()...))>
    {};

class A
{
public:
    A(int) {}
    A(short) noexcept {}
};

int main()
{
    static_assert(is_nothrow_constructible_custom<A, int>::value == false, "");
    static_assert(is_nothrow_constructible_custom<A, short>::value == true, "");
}

GCC 4.9作品: http://ideone.com/3ggm0E

MSVC: 用/ EHsc / nologo / W4 / c编译 main.cpp中 main.cpp(7):错误C2143:语法错误:缺少')'之前'...' main.cpp(8):注意:请参阅正在编译的类模板实例化'is_nothrow_constructible_custom'的引用 main.cpp(7):错误C2947:期待'&gt;'终止template-argument-list,找到'&gt;' main.cpp(7):错误C2976:'std :: integral_constant':模板参数太少 c:\ tools_root \ cl \ inc \ xtr1common(34):注意:请参阅'std :: integral_constant'的声明 main.cpp(8):错误C2955:'std :: integral_constant':使用类模板需要模板参数列表 c:\ tools_root \ cl \ inc \ xtr1common(34):注意:参见'std :: integral_constant'的声明

0 个答案:

没有答案