Следующий код успешно компилируется с g++ 7.3.0 и не может скомпилироваться с кланом g++ 6.0.0 (флагов компиляции являются -std=c++17 -Wall -Wextra -Werror -pedantic-errors
):
auto foo = [](auto, auto... tail) {
if constexpr (sizeof...(tail) > 0)
{
return foo(tail...);
}
else
{
return 42;
}
};
int main()
{
}
clan g++ сообщение об ошибке компиляции:
error: переменная 'foo', объявленная с выведенным типом 'auto', не может появиться в своем собственном инициализаторе
return foo(tail...);
Какое поведение является стандартным в этом случае?