On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 19.12.14 13:30. Заголовок: 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.

На мой взгляд подобное объявление может выглядеть следующим образом:
 
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, то, как мне сказали, код будет компилироваться, хотя я сам не проверял.

Так что не удивляйтесь, если в скором времени вы будете встречать такие странные объявления операторов преобразований.:)


Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 28
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет