【发布时间】:2015-10-22 21:38:39
【问题描述】:
根据这个answer,下面的代码应该编译没有错误:
#include <type_traits>
namespace
{
struct A { int i; };
volatile A a{};
static_assert(std::is_volatile< decltype(a) >{});
static_assert(std::is_volatile< decltype(a.i) >{});
}
但是有一个硬错误:
main.cpp:10:1: error: static_assert failed
static_assert(std::is_volatile< decltype(a.i) >{});
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Live example with clang 3.6.0.
这是一个clang错误还是我错过了一些实质性的东西?
附加:
#include <type_traits>
namespace
{
struct A { int i; };
const A a{};
static_assert(std::is_const< decltype(a) >{});
static_assert(std::is_const< decltype(a.i) >{});
}
后一个代码 sn-p 的行为完全相同。
附加:
static_assert(std::is_volatile< std::remove_pointer_t< decltype(&a.i) > >{});
不会导致错误。
【问题讨论】:
-
另外,
static_assertwith no message 是 C++1z 扩展 -
@itsnotmyrealname C++11 的相同错误coliru.stacked-crooked.com/a/3f2c7e25c543fb28
标签: c++ c++11 clang c++14 typetraits