Добавить const в ссылку
Я хочу добавить const к ссылочному типу по typedef const A B;
.
как-то это не работает. Разве это невозможно в c++?
тест:
#include <type_traits>
typedef int& A;
typedef const A B; // <-- Add const
// typedef std::add_const<A>::type B; // also doesn't work.
static_assert(std::is_const<typename std::remove_reference<
B>::type>::value, "is const");
int main() {
return 0;
}
Ошибка Компиляции:
add2.cpp:5:1: error: static assertion failed: is const
static_assert(std::is_const<typename std::remove_reference<
^~~~~~~~~~~~~
1 ответов
почему-то не работает. Разве это невозможно в c++?
не с тем, как вы делаете это. typedef
не работает как препроцессор макросов.
typedef int& A;
typedef const A B;
не переводится на
typedef int& A;
typedef const int& B;
на const
на
typedef const A B;
относится к A
, а не int
часть A
. Поскольку ссылки неизменяемы в C++,const A
это то же самое, что A
из точки типа вид.
вы можете использовать:
typedef int const& B;
если вы хотите получить его из A
, вам использовать:
using B = typename std::remove_reference<A>::type const&;
если вы можете использовать C++14 или более поздней версии, вы можете упростить это:
using B = std::remove_reference_t<A> const&;