以下[over.load] / 1中突出显示的句子是什么意思?

时间:2019-07-15 14:44:45

标签: c++ overloading language-lawyer using-directives name-lookup

下面突出显示的句子是什么意思?它与功能模板有关系吗?

[over.load]/1

  

并非所有函数声明都可以重载。那些不能   重载在此处指定。如果程序包含以下内容,则格式错误   同一范围内的两个此类不可重载声明。 [注意:此   限制适用于范围内以及之间的显式声明   此类声明和通过使用声明进行的声明   ([namespace.udecl])。 不适用于虚构的功能集   由于名称查找(例如,由于使用了指令)   重载分辨率(例如,用于操作员功能)。 —尾注]

1 个答案:

答案 0 :(得分:10)

您可以执行以下操作:

namespace N {
  void f(int);
}

namespace M {
  int f(int);
}

using namespace N; // ok
using namespace M; // ok
// even if both have conflicting f's

您不会在这里直接超载任何内容。 using指令允许名称查找可以找到两个函数,并且此时调用是不明确的。

这里的函数集包含两个不可重载的函数,但是由于按引号通过名称查找可以找到它们,所以可以。