gpt4 book ai didi

c++ - 涉及嵌套模板的 MSVC 编译器错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:21 24 4
gpt4 key购买 nike

以下代码使用 GCC 4.7 和 clang 3.0 编译,但不使用 MSVC 10:

template <typename X>
struct point
{
template <typename Seq>
struct point_iterator
{
template <typename T>
struct deref;

template <typename Sq>
struct deref<point_iterator<Sq> >
{
};
};
};

int main()
{
typedef point<int> point_t;
typedef point_t::point_iterator<point_t> Iterator;
Iterator::deref<Iterator> m;
}

MSVC 给出的编译器错误是:

test.cpp
testcpp(21) : error C2079: 'm' uses undefined struct 'point<X>::point_iterator<Seq>::deref<T>'
with
[
X=int,
Seq=point_t
]
and
[
T=Iterator
]

我认为应该定义有问题的类型,因为它应该匹配 deref 的部分特化。

  1. 这是有效代码吗?如果是这样,并且拒绝它是 MSVC 方面的错误,有谁知道是否已经报告了该错误?
  2. 如果这是一个错误,有人知道解决方法吗?

最佳答案

问题是 MSVC10 不同意您专门化该类。如果你试试这个

    template <typename Sq>
struct deref
{
typedef int basic;
};

template <typename Sq>
struct deref<point_iterator<Sq> >
{
typedef int special;
};

你会发现 Iterator::deref<Iterator>::special存在于 gcc 中,但仅存在于 MS 中 basic存在。

我确实认为您的代码是正确的。

似乎只有部分特化受到影响。专业int按预期工作。

关于c++ - 涉及嵌套模板的 MSVC 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com