Форум » C/C++ » auto в объявлении операторов преобразований (auto in conversion operators) » Ответить

auto в объявлении операторов преобразований (auto in conversion operators)

Сыроежка: До сих пор многие разработчики находятся в нерешительности и обсуждают вопрос: пора ли им переходить с 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. На мой взгляд подобное объявление может выглядеть следующим образом: [pre2] struct A { operator auto() const { return 10; } }; [/pre2] Было бы неправильным объявить оператор преобразования следующим образом [pre2] operator auto() const ->int { return 10; } [/pre2] так как оператор преобразования не может содержать в себе trailing-return-type. Сейчас не так-то просто найти компилятор, который будет компилировать такое объявление оператора преобразования. Например, on-line компилятор MS VC++ 2014 выдает следующее сообщение об ошибке [pre2] error C3177: you cannot have a conversion function to a type that contains 'auto' [/pre2] on-line компилятор GCC 4.8.1 на www.ideone.com также выдает сообщение об ошибке [pre2] error: invalid use of ‘auto’ in conversion operator operator auto() const { return 10; } ^ [/pre2] Тем не менее если установить для этого компилятора режим компиляции в соответствии со стандартом C++ 2014, то, как мне сказали, код будет компилироваться, хотя я сам не проверял. Так что не удивляйтесь, если в скором времени вы будете встречать такие странные объявления операторов преобразований.:)

Ответов - 0



полная версия страницы