typedef int& T1; typedef const T1 T2;

Тема в разделе "LANGS.C", создана пользователем systemio, 24 мар 2008.

  1. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    typedef int& T1;
    typedef const T1 T2;

    вот этот код в VS2003 приводит к сообщению:
    warning C4181: qualifier applied to reference type; ignored

    обрубает скотина const. Это стандарт такой? И что в этом коде такого сложного что компилятор не может его одолеть?
     
  2. systemio

    systemio New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    98
    причем это
    typedef int* T1;
    typedef const T1 T2;
    компилируется без ворнингов!?
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Судя по тому, что comeau думает так же, то C4181 можно признать существенным.
     
  4. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    ИМХО:

    пункт 8.3.2 Стандарта:

    Cv-qualified references are ill-formed except
    when the cv-qualifiers are introduced through the use of a typedef (7.1.3) or of a template type argument
    (14.3), in which case the cv-qualifiers are ignored. [Example: in
    typedef int& A;
    const A aref = 3; // ill-formed;
    // non-const reference initialized with rvalue
    the type of aref is “reference to int”, not “const reference to int”. ]
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Это компилируется в "константный указатель", а не в "указатель на константу", как ты по видимому ожидаешь. Ссылка может быть на константу и не на константу, но понятие константности к самим ссылкам неприменимо, отсюда и ахтунг.