Я хотел бы разбить компиляцию, если объект объявлен как const.Проверьте, объявлен ли объект const
Следующая не работает:
#include <type_traits>
struct A {
A() : v(0)
{
static_assert(! std::is_const<decltype(*this)>::value, "declared as const");
}
int& AccessValue() const
{
return const_cast< int& >(v);
}
int v;
};
int main()
{
A a1; // ok, this compiles
const A a2; // no, this break the compilation
a1.AccessValue() = 5; // ok
a2.AccessValue() = 6; // OPS
}
Итак, есть ли способ разорвать компиляции, если объект этого типа объявлен сопзЬ?
Я сомневаюсь, что это возможно. Чего вы хотите достичь? –
Если кто-то получает 'const A', но не должен, компилятор будет в конечном итоге давать ошибки, в основном говорящие одно и то же (объявленные как const), поэтому вам действительно не нужно проверять такие вещи. – Shahbaz
@AlexandreC. UB использовать const_cast для изменения из ссылки на const для ссылки без const, если объект не объявлен не const. Мне нужно использовать const_cast, но хотелось бы, чтобы люди не объявляли объекты этого типа const. –