2016-01-11 2 views
0

Код в заголовке:'Const авто' отличается уровней косвенности от 'сопзЬ символ * сопзЬ'

extern const char* const foo; 

Код в источнике:

const auto foo = "bar"; 

Visual Studio 2015 producess следующее сообщение об ошибке:

Error C2040 'foo': 'const auto' differs in levels of indirection from 'const char *const '

У моего встроенного компилятора (uVision от Keil) нет проблем с этим кодом, также нет Clang (coliru). Мой вопрос в том, что это ошибка в компиляторе VS или есть проблема в моем коде?

+0

'auto' не выводит резюме-классификаторов. –

+2

Связано: [Используется ли декларация с использованием «авто» для объявления extern, которая использует спецификатор конкретного типа?] (Http://stackoverflow.com/questions/26386010/does-a-declaration-using-auto-match-an- extern-declaration-that-uses-a-concrete) – BlackDwarf

+0

@BlackDwarf Спасибо! – rozina

ответ

0

Я думаю, что ваш auto не const достаточно - это выводится как const char * (который является тип строкового литерала), и вам нужно const char * const. Я не думаю, что это ошибка компилятора.

Я бы ожидал, что этот код вызовет ошибку в GCC и clang при компиляции с -pedantic-errors.

0

определение должно следовать декларации (опуская EXTERN): const char* const foo = "bar";

Смежные вопросы