Рассмотрим минимальный пример:
template <int>
struct bar { };
int main()
{
[](auto i) -> bar<i> { return {}; };
}
Или даже:
template <int>
struct bar {};
template <class I>
auto foo(I i) -> bar<i> {}
clang компилирует обе формы без проблем, но gcc обнаруживает, что действия недействительны (пример 1), (пример 2)
Вопрос может выглядеть глупо, однако тип параметра может иметь перегруженный оператор преобразования constexpr (в этом случае тип i
выводится из значения, переданного в lambda/foo в int
в constexpr), и в этом случае он было бы довольно удобно не принуждать к обходу, чтобы получить доступ к нему напрямую...