У меня есть рабочая программа, которая успешно компилируется в Visual Studio. Но попытка перенести его в GCC/Clang привели к некоторым ошибкам компиляции.
Максимально уменьшенный пример заключается в следующем:
#include
struct A {
A(const std::vector &) {}
};
A a( { { 1, 2 } } );
< /code>
GCC и Clang жалуются: < /p>
error: call of overloaded 'A(
)' is ambiguous
7 | A a( { { 1, 2 } } );
| ^
note: there are 3 candidates
note: candidate 1: 'A::A(const std::vector&)'
note: candidate 2: 'constexpr A::A(const A&)'
note: candidate 3: 'constexpr A::A(A&&)'
< /code>
Но EDG соглашается с MSVC, что программа в порядке. Онлайн демонстрация: https://gcc.godbolt.org/z/msjc9f1nk
Есть ли здесь реальная двусмысленность, и какая реализация верна? class = "lang-cpp prettyprint-override">struct B {
int i, j;
};
struct A {
A(A&&) = delete;
A(const B &) {}
};
A a( { { 1, 2 } } );
< /code>
Это принято GCC и EDG. Но как Clang, так и MSVC отвергают это с < /p>
error: call to deleted constructor of 'A'
error C2280: 'A::A(A &&)': attempting to reference a deleted function
У меня есть рабочая программа, которая успешно компилируется в Visual Studio. Но попытка перенести его в GCC/Clang привели к некоторым ошибкам компиляции. Максимально уменьшенный пример заключается в следующем: [code]#include
struct A { A(const std::vector &) {} };
A a( { { 1, 2 } } ); < /code> GCC и Clang жалуются: < /p> error: call of overloaded 'A( )' is ambiguous 7 | A a( { { 1, 2 } } ); | ^ note: there are 3 candidates note: candidate 1: 'A::A(const std::vector&)' note: candidate 2: 'constexpr A::A(const A&)' note: candidate 3: 'constexpr A::A(A&&)' < /code> Но EDG соглашается с MSVC, что программа в порядке. Онлайн демонстрация: https://gcc.godbolt.org/z/msjc9f1nk Есть ли здесь реальная двусмысленность, и какая реализация верна? class = "lang-cpp prettyprint-override">struct B { int i, j; };
struct A { A(A&&) = delete; A(const B &) {} };
A a( { { 1, 2 } } ); < /code> Это принято GCC и EDG. Но как Clang, так и MSVC отвергают это с < /p> error: call to deleted constructor of 'A' error C2280: 'A::A(A &&)': attempting to reference a deleted function [/code] онлайн демо: https://gcc.godbolt.org/z/cthfajaa8 Тот же вопрос: какое поведение правильное?