如果一个类只有一个成员函数通过需求启用它仍然可以模糊地重载?

时间:2017-05-04 22:50:59

标签: c++ c++-concepts

例如,这段代码有效吗?

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,但它似乎应该对我有用。

1 个答案:

答案 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有两种可能的选择,编译器如何知道你没有搞砸并打算打电话给另一个。