Я пытаюсь передать шаблон функции в качестве аргумента другой функции, как показано в примере ниже.
#include <iostream>
template <typename T>
decltype(auto) foo(T t)
{
return t;
}
template <typename Fn, typename T>
decltype(auto) bar(Fn fn, T t)
{
return fn(t);
}
int main()
{
int arg = 0;
std::cout << bar(foo<decltype(arg)>, arg) << std::endl;
return 0;
}
Хотя это работает в clang 9.0 и msv c v19.24, происходит сбой при выводе g cc 9.2
g cc:
no matching function for call to 'bar(<unresolved overloaded function type>, int&)' std::cout << bar(foo<decltype(arg)>, arg) << std::endl;
Это ошибка в g cc? Также я могу как-то обойти это в g cc?
Годболт ссылка: https://godbolt.org/z/oCChAT