我和一个 friend 正在讨论 C++ 模板。他问我这应该做什么:
#include <iostream>
template <bool>
struct A {
A(bool) { std::cout << "bool\n"; }
A(void*) { std::cout << "void*\n"; }
};
int main() {
A<true> *d = 0;
const int b = 2;
const int c = 1;
new A< b > (c) > (d);
}
main 中的最后一行有两个合理的解析。 'b' 是模板参数还是 b > (c)
模板参数?
虽然编译它很简单,看看我们得到了什么,但我们想知道是什么解决了歧义?
最佳答案
据我所知,它会被编译为 new A<b>(c) > d
.这是解析它恕我直言的唯一合理方法。如果解析器在正常情况下不能假定 > 结束模板参数,那将导致更多的歧义。如果你想要另一种方式,你应该写:
new A<(b > c)>(d);
关于C++ 模板歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52506/