【发布时间】:2018-12-23 14:15:47
【问题描述】:
当我偶然发现一个奇怪的行为时,我试图static_assert 一些类型特征以确保自定义类型具有预期的noexcept 保证。上面简化的 sn-p 说明了这个问题:
struct DefaultOnly
{
constexpr DefaultOnly() noexcept(false) {};
};
static_assert(std::is_nothrow_default_constructible_v<DefaultOnly>);
对于这种简单类型,GCC 8 通过了static_assert,而 Clang 7 失败了。我不知道哪个编译器是正确的。这是其中一个编译器中的错误,还是 nothrow 默认可构造函数 的标准定义足够灵活,以至于两个编译器都可以根据它们对标准的解释产生有效但不同的结果?
【问题讨论】:
标签: c++ language-lawyer