Перегруженный конструктор по умолчанию с конструктором списка инициализаторов, который также является конструктором по уC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Перегруженный конструктор по умолчанию с конструктором списка инициализаторов, который также является конструктором по у

Сообщение Anonymous »

Рассмотрим следующий пример, который компилируется с помощью clang, но отклоняется edg, gcc и msvc. Демо

Код: Выделить всё

#include 

struct C
{
C(){}
C(std::initializer_list i = {3})
{
}
};

int main()
{
C d{};   //clang:Ok, gcc:No, MSVC: No, EDG: No
}
Как мы видим, clang принимает код, а gcc и другие его отклоняют. GCC говорит:

Код: Выделить всё

: In function 'int main()':
:20:9: error: call of overloaded 'C(
)' is ambiguous
20 |     C d{};   //clang:Ok, gcc:No, MSVC: No, EDG: No
|         ^
:10:5: note: candidate: 'C::C(std::initializer_list)'
10 |     C(std::initializer_list i = {3})
|     ^
:6:5: note: candidate: 'C::C()'
6 |     C()
|     ^
Я хочу знать, какой компилятор здесь верен согласно последнему стандарту.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -is-also-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»