Добавить 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&;