模板类中的静态功能:GCC与VS
static function in template class: gcc vs VS
以下C 代码编译并与Visual Studio 2017一起使用,但使用GCC 5.0提出了错误的"预期初级表达"。知道为什么吗?描述是一个结构,描述:: add是函数模板。
template <class X>
struct DataPoint
{
X value;
DataPoint()
: value(0.) {}
DataPoint( X value )
: value(value) {}
static void describe(Description< DataPoint<X> > & desc)
{
desc.add<X>("f", ".", offsetof(DataPoint<X>, value));
}
}
实际上,当未指定数据关注点模板类型时,VS甚至都不抱怨:
static void describe(Description<DataPoint> & desc)
{
desc.add<X>("f", ".", offsetof(DataPoint, value));
}
您的代码不是标准的C 。desc.add<X>
中的add
是一个因名称,因此编译器不知道它是否是模板。Visual C 仍然无法实现整个两阶段查找,因此它可以通过它来进行。但是G (和clang等(要求您使用template
关键字。
desc.template add<X>("f", ".", offsetof(DataPoint, value));
相关文章:
- 数据成员SFINAE的C++17测试:gcc vs clang
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 命名空间范围内的外部 - GCC vs clang vs msvc
- C++正则表达式失败(GCC vs Microsoft 编译器)
- 使用函数参数作为常量表达式的一部分 - gcc vs clang
- `noexcept`函数中的std :: terminate`调用函数有限-GCC vs clang codegen
- variadic模板代码中的GCC VS MSVC编译误差
- GCC vs CLANG:除了静态强制转换时在未使用的模板专用化中解析外,否
- GCC vs CLANG:将捕获的参数包扩展两次
- GCC vs Clang 中的堆栈粉碎(可能是由于金丝雀)
- "Nested" 带括号的类模板参数推导:GCC vs. clang
- C 构造函数:使用this_class(GCC vs Visualc)
- GCC vs Clang:将功能与-FPIC一起插入
- Glibc vs GCC vs binutils compatibility
- 模板编译:gcc vs VS2010
- GCC vs. Clang:"invalid use of incomplete type" std::d eclval 和模板专业化
- 默认参数,gcc vs clang
- Clang vs GCC vs MSVC模板转换操作符-哪个编译器是正确的
- GCC vs clang -使用' make_overload '可变lambda继承时的模糊重载
- Clang vs. GCC vs. MSVC中的SFINAE和可见性检查——这是正确的