Перегруженный конструктор по умолчанию с конструктором списка инициализаторов, который также является конструктором по у ⇐ 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

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