2014-11-22 2 views
0

N3797::13.3.3.1/2 [over.best.ics] говорит о плохо формируется неявное преобразование следующим образом:Пример плохо образован неявного преобразования

Неявные последовательности преобразования имеют дело только с типом, CV-квалификации, а категория значение аргумента и как они преобразуются в , чтобы соответствовать соответствующим свойствам параметра. Другие свойства, такие как время жизни, класс хранения, выравнивание или , игнорируются доступность аргумента и независимо от того, является ли аргумент битовым полем . Таким образом, хотя неявное последовательность преобразования может быть определена для данной пары аргументов параметра, преобразование от аргумента к параметру все еще может быть плохо сформированы в конечном счете .

У меня нет идеи о том, как мы можем определить такое преобразование. Вещь - все виды конверсий, которые я знаю, - это хорошо сформированное преобразование, такое как пользовательское преобразование с operatorn A(){ ... } или стандартное преобразование. Не могли бы вы привести пример плохо сформированного преобразования?

+0

Возможно, что-то вроде частного конструктор преобразования из 'int'. – chris

ответ

0

Простой пример в §13.3.3.1.4 [over.ics.ref]/р4:

[Примера: функция с «именующей ссылкой на int» Параметр может быть жизнеспособным кандидата, даже если соответствующий аргумент представляет собой бит-поле int. Формирование неявных конверсионных последовательностей обрабатывает битовое поле int как int lvalue и находит точное совпадение с параметром . Если функция выбрана с помощью разрешения перегрузки, вызов , тем не менее, будет плохо сформирован из-за запрета на , связывающего ссылку lvalue без значения const с битовым полем (8.5.3). - конец пример]

+0

Действительно, спасибо. –

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