gpt4 book ai didi

c++ - 这是一个已知的 VC14 错误吗

转载 作者:行者123 更新时间:2023-11-28 06:06:41 24 4
gpt4 key购买 nike

下面的代码给我一个编译错误。

$ cl.exe VC14-bug.cpp

Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x64

Copyright (C) Microsoft Corporation. All rights reserved.

VC14-bug.cpp

VC14-bug.cpp(41): error C2893: Failed to specialize function template 'void fails(T1,Poly> *)'

VC14-bug.cpp(41): note: With the following template arguments:

VC14-bug.cpp(41): note: 'T1=int'

VC14-bug.cpp(41): note: 'T2=Kernel'

问题出在函数 f() 上。任何人都可以复制它吗?

template <typename T>
struct Container
{};


struct Kernel {
typedef int Nested;
};


template <class K,
class C = Container<typename K::Nested*> >
struct Poly
{};


// if f() gets commented it compiles
template<class T>
Poly<T>*
f()
{
return 0;
}


//template<class T2, class T1> // this compiles
template<class T1, class T2>
void
fails(T1,
Poly<T2> *)
{}


// if f() is moved here it also compiles

int main()
{
Poly<Kernel> * poly = 0;

fails(0, poly);

return 0;
}

最佳答案

那肯定是VC14的模板参数推导代码的bug。

一种可能的解决方法是允许 Poly 的所有类型的容器,在 fails 中:

template<class T1, class T2, class Cont>
void
fails(T1,
Poly<T2, Cont> *)
{}

我已经使用 online Visual C++ compiler 进行了验证.不幸的是,无法链接到测试用例 like what we would do on Ideone.com (click to see the compilation with g++-5.1) .

关于c++ - 这是一个已知的 VC14 错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255000/

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