【发布时间】:2020-05-21 18:19:45
【问题描述】:
我有一个函数模板和一个概念的重载:
template<typename T> void f() {std::cout<< "general" << std::endl;}
template<std::integral T> void f() {std::cout<< "integral" << std::endl;}
现在我想获得一个指向该概念的函数的函数指针。当我使用辅助结构时它工作正常:
typedef void (*tF)();
template<typename T> struct H
{
static void g() {f<T>();}
};
tF fHd = &H<double>::g;
tF fHi = &H<int>::g;
当我在没有辅助结构的情况下直接执行时,比如
tF fd = &f<double>;
tF fi = &f<int>;
GCC 10 给出错误信息:
error: converting overloaded function ‘f’ to type ‘tF’ {aka ‘void (*)()’} is ambiguous
tF fi = &f<int>;
note: candidates are: ‘void f() [with T = int]’
template<typename T> void f() {std::cout<< "general" << std::endl;}
note: ‘void f() [with T = int]’
template<std::integral T> void f() {std::cout<< "integral" << std::endl;}
这是 GCC 中的错误还是标准要求?
【问题讨论】:
-
gcc 错误,提交95262。
标签: c++ c++20 c++-concepts