Nach dieser answer, der folgende Code sollte ohne Fehler kompiliert werden:cv-kundiges Mitglied ist die Struktur nicht in ähnlicher Weise CV-qualifizierte
#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) >{});
}
aber es ist ein harter Fehler:
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 .
Ist es ein Clang Bug oder fehle ich etwas wesentliches?
ZUSÄTZLICH:
#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) >{});
}
Genau das gleiche Verhalten für letztere Code-Schnipsel.
ZUSÄTZLICH:
static_assert(std::is_volatile< std::remove_pointer_t< decltype(&a.i) > >{});
nicht einen Fehler verursachen.
Außerdem ist 'static_assert' ohne Nachricht eine C++ 1z Erweiterung – snr
@itsnotmyrealname Derselbe Fehler für C++ 11 http://coliru.stacked-crooked.com/a/3f2c7e25c543fb28 – Orient