C模板歧义

前端之家收集整理的这篇文章主要介绍了C模板歧义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我和朋友正在讨论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)模板参数?

虽然编译这个很简单,看看我们得到了什么,但我们想知道是什么解决了歧义?

解决方法

AFAIK将被编译为新的A< b>(c)> d.这是解析它的唯一合理方法恕我直言.如果解析器在正常情况下不能假设>结束模板参数,这会导致更加模糊.如果你想要另一种方式,你应该写:
new A<(b > c)>(d);

猜你在找的C&C++相关文章