Следующий код принимается G ++ (14.2.1): < /p>
#include
template
void foo(T i, std::vector &v = {})
{ }
int main()
{
std::vector v;
foo(3, v);
}
< /code>
, но отклонен Clang (19.1.7) с: < /p>
non-const lvalue reference to type 'std::vector' cannot bind to an initializer list temporary
< /code>
Если я полагаюсь на аргумент по умолчанию (пропуская 2-й параметр), оба компилятора отклоняют код, что имеет смысл, поскольку предпринимается попытка связать неконфессиональную ссылку LVALUE с rvalue.
правильно ли Clang, отклонив код или G ++ правильно, принимая код?
Подробнее здесь: https://stackoverflow.com/questions/794 ... d-by-clang