You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC编译模板代码报错:expected primary-expression before ')' token求助

解决GCC模板中成员模板调用的编译错误

这是典型的C模板依赖名称解析问题,GCC在这里的语法检查比Clang更严格,严格遵循了C标准的要求~

问题原因

当你在模板类中,通过一个依赖于模板参数的对象(这里this->asdf的类型std::shared_ptr<T>依赖于模板参数T)调用它的成员函数模板时,编译器在解析模板定义阶段无法确定get_value是一个成员函数模板还是普通的成员变量/函数。GCC会严格要求你显式标记出这是一个模板调用,而Clang则做了更宽松的推断,所以没报错。

修复方案

只需要在get_value前加上template关键字,明确告诉编译器这是一个成员模板调用:

template <uint First, uint Second, typename T>
struct Thing {
    std::shared_ptr<T> asdf;
    uint get() const {
        // 加上template关键字消除歧义
        this->asdf->template get_value<First,Second>();
    }
};

补充说明

这个template关键字是C++标准规定的必要语法,用于在依赖名称中区分模板调用和普通的小于运算符。修改后,GCC 7可以正常编译,同时Clang也不会产生新的警告,完全兼容两个编译器的要求。

内容的提问来源于stack exchange,提问作者Brian Vandenberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:29:53