gpt4 book ai didi

c++ - 模板类中常规类中的模板成员函数不能用 GCC 编译,但可以用 VC++

转载 作者:太空宇宙 更新时间:2023-11-04 15:52:04 25 4
gpt4 key购买 nike

我正在将 C++ 模板库从 VC++ 移植到 GCC。

下面的例子用 VS2005 编译得很好

#include <iostream>

template<class T>
struct A{
struct B{
template<int n>
T foo() const{
return static_cast<T>(n)/10;
}
};

T bar() const{
B b;
return b.foo<2>();
}
};

int main(){
A<float> a;
std::cout << a.bar() << std::endl;
return 0;
}

但是使用 GCC 4.4.1 我得到以下错误

g++ ttest.cpp -o ttest
ttest.cpp: In member function ‘T A<T>::bar() const’:
ttest.cpp:14: error: expected primary-expression before ‘)’ token
ttest.cpp: In member function ‘T A<T>::bar() const [with T = float]’:
ttest.cpp:20: instantiated from here
ttest.cpp:14: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’
make: *** [ttest] Error 1

谁能给我解释一下哪里出了问题。

这是否符合标准?

最佳答案

当调用 foo 时,你缺少一个关键字——这是一个函数模板,你必须明确地告诉 GCC 这是一个模板,使用以下可怕的语法(不要问我为什么他们认为这是明智的)。

return b.template foo<2>();

编辑:我不是语言律师,所以不能告诉你它是否符合标准,我相信这个网站上的许多人之一可以! ;)

关于c++ - 模板类中常规类中的模板成员函数不能用 GCC 编译,但可以用 VC++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250408/

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