例如,这段代码有效吗?
template <class T>
struct A {
void f()
requires std::is_same_v<T, int>
{
}
void f(int)
requires !std::is_same_v<T, int>
{
}
};
int main() {
auto fptr = &A<int>::f;
return 0;
}
它使用gcc赢得了compile,但它似乎应该对我有用。
答案 0 :(得分:-1)
如果您尝试从问题行的代码中删除自动类型扣除,编译器会提供更合适的消息:
prog.cc: In function 'int main()':
prog.cc:18:40: error: conversion from '<unresolved overloaded function
type>' to non-scalar type 'std::function<void()>' requested
std::function<void()> fptr = A<int>::f;
尝试解决A::f
有两种可能的选择,编译器如何知道你没有搞砸并打算打电话给另一个。