#include
#include
template< class T > void f( T& t ){} ;
template< class T > void f( const T&& ) {};
int main()
{
int i = 0;
f(i); //clang:nope, gcc:ok, msvc:ok
}
:10:5: error: call to 'f' is ambiguous
10 | f(i); //clang:nope, gcc:ok, msvc:ok
| ^~~~~~~
:4:26: note: candidate function [with T = int &]
4 | template< class T > void f( T& t ){} ;
| ^
:5:26: note: candidate function [with T = int &]
5 | template< class T > void f( const T&& ) {};
|
Я хочу знать, какой компилятор здесь правильный согласно стандарту C++.
Я написал следующую программу, в которой есть перегруженные шаблоны функций, но она отклонена clang и принята как gcc, так и msvc. Демо [code]#include #include template< class T > void f( T& t ){} ; template< class T > void f( const T&& ) {}; int main() { int i = 0; f(i); //clang:nope, gcc:ok, msvc:ok } [/code] Кланг говорит: [code]:10:5: error: call to 'f' is ambiguous 10 | f(i); //clang:nope, gcc:ok, msvc:ok | ^~~~~~~ :4:26: note: candidate function [with T = int &] 4 | template< class T > void f( T& t ){} ; | ^ :5:26: note: candidate function [with T = int &] 5 | template< class T > void f( const T&& ) {}; | [/code] Я хочу знать, какой компилятор здесь правильный согласно стандарту C++.
Я не уверен, какой компилятор прямо здесь, так как я еще не полностью опытен с концепциями C ++ 20. Следующий код отклоняется GCC (15.1), говоря, что не существует соответствующей объявления для foo :: do_foo , clang (20.1.0) принимает код. Вот на...
Я не уверен, какой компилятор прямо здесь, так как я еще не полностью опытен с концепциями C ++ 20. Следующий код отклоняется GCC (15.1), говоря, что не существует соответствующей объявления для foo :: do_foo , clang (20.1.0) принимает код. Вот на...
I'm encountering an issue where a template function uses std::invoke to call another function, passing a size_t argument to a parameter expecting an int32_t. This should, theoretically, trigger a warning about type conversion. However, when...
Я столкнулся с ситуацией, когда gcc и clang имеют разные мнения по поводу одного и того же фрагмента кода. Насколько я понимаю, использование объявлений и встроенных пространств имен clang неверны.
Пример ниже работает так, как задумано, с gcc 14.2...