А>Начал активно пользоваться C++0x расширениями в VS 2010, и обнаружил неприятность при объявлении А>переменных с помощью операторы вывода типа auto.
А>class ClassA А>{ А>public: А> void fn() {} // НЕ const метод А>};
А>void funca() А>{ А> ClassA a; А> const ClassA& r_a = a; // ссылка на константный объект
А> auto r_a1 = r_a; // по идее, должна быть ссылка на константный объект... А> r_a1.fn(); // ...ан нет, спокойно компилируется и выполняется
А> ClassA& r_a2 = r_a; // здесь все хорошо — ругается А> r_a2.fn();
А>}
А>Т.е. оператор auto отметает квалификатор const.
А>Буду признателен, если кто-то укажет, где почитать о такой особенности (если это не бага, конечно). А>Спасибо.
Все нормально: "auto r_a1 = r_a;" интерпретируется как "ClassA r_a1 = r_a;", и это логично (ты не написал что хочешь ссылку — получи копию). Если хочешь константную ссылку — "const auto &r_a1 = r_a";