gpt4 book ai didi

c++ - 调用显式专用类成员模板函数时出现奇怪的编译错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:27 25 4
gpt4 key购买 nike

我在使用 GCC 5.1.0 (tdm64-1) 编译以下代码时出现奇怪的编译错误

template <class T>
struct test {
template <class X>
bool func();
};

template <class X, class Y>
bool testfunc(X x, Y y)
{
test<Y> s;

if (s.func<X>()) // <-- parse error here
return false;
}

void func2()
{
testfunc( double(), long() );
}

错误是

testX.cpp: In function 'bool testfunc(X, Y)': 
testX.cpp:12:15: error: expected primary-expression before '>' token
if (s.func<X>())
^
testX.cpp:12:17: error: expected primary-expression before ')' token
if (s.func<X>())

注意只有当Y是模板参数的版本才会出现这个错误。当我删除 Y 模板参数并使用已知类型(例如 test )实例化测试时,它编译没有错误。

那么这里有什么问题呢?

最佳答案

改变这个:

if (s.func<X>()) 

对此:

if (s.template func<X>())

原因是s.func<X>是从属名称,因此编译器无法判断 func是一个模板成员函数。

关于c++ - 调用显式专用类成员模板函数时出现奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406523/

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