До сих пор многие разработчики находятся в нерешительности и обсуждают вопрос: пора ли им переходить с
C++ 2003 на
C++ 2011..
На мой взгляд уже настало время обсуждать переход с
C++ 2011 на
C++ 2014..
Лично я убежден, что надо всегда стремиться использовать новейшие версии компиляторов и языков программирования.. Иначе вы просто накапливаете будущую "задолженность" перед неизбежным рефакторингом своего проекта, создаете себе трудности в использовании сторонних разработок, так как старые версии могут уже не поддерживаться, а новые будут несовместимы с вашим проектом.
Но вернемся к
C++. Новый стандарт
C++ теперь разрешает использовать спецификатор
auto в объявлении операторов преобразований. Вот что написано в разделе
7.1.6.4 auto specifier параграфе №2 стандарта
C++ 2
The placeholder type can appear with a function declarator in the decl-specifier-seq, type-specifier-seq,
conversion-function-id, or trailing-return-type, in any context where such a declarator is valid. If the function declarator includes a trailing-return-type (8.3.5), that specifies the declared return type of the function. If the declared return type of the function contains a placeholder type, the return type of the function is deduced from return statements in the body of the function, if any.
Однако нигде в стандарте не приведен пример объявления оператора преобразования со спецификатором
auto.
На мой взгляд подобное объявление может выглядеть следующим образом:
struct A
{
operator auto() const { return 10; }
};
Было бы неправильным объявить оператор преобразования следующим образом
operator auto() const ->int { return 10; }
так как оператор преобразования не может содержать в себе
trailing-return-type.
Сейчас не так-то просто найти компилятор, который будет компилировать такое объявление оператора преобразования. Например, on-line компилятор MS VC++ 2014 выдает следующее сообщение об ошибке
error C3177: you cannot have a conversion function to a type that contains 'auto'
on-line компилятор GCC 4.8.1 на www.ideone.com также выдает сообщение об ошибке
error: invalid use of ‘auto’ in conversion operator
operator auto() const { return 10; }
^
Тем не менее если установить для этого компилятора режим компиляции в соответствии со стандартом
C++ 2014, то, как мне сказали, код будет компилироваться, хотя я сам не проверял.
Так что не удивляйтесь, если в скором времени вы будете встречать такие странные объявления операторов преобразований.:)