以下代码打印nullptr
而不是empty
(godbolt 链接):
#include <iostream>
class empty { };
#if 1
void f(std::nullptr_t) {
std::cout << "nullptr\n";
}
#endif
void f(empty) {
std::cout << "empty\n";
}
int main() {
f({});
}
禁用f(nullptr_t)
变体会导致empty
打印。当两个变体都可用时,C++ 使用什么规则来选择nullptr_t
变体?empty