c++ - xlc: 模板类的 sizeof 不工作

标签 c++ templates xlc

我在模板参数中使用 sizeof(),如下所示:

#include <iostream>

template<class A>
struct Foo {
    A a;
};

template<class A, size_t S = sizeof(Foo<A>)>
class Bar {
public:
    Bar() {
        // prints 4, as expected
        std::cout << sizeof(Foo<A>) << std::endl;

        // prints 1! why?
        std::cout << S << std::endl;
    }
};

int main(int, char**) {
    Bar<int> foo;
}

出于某种原因,xlc++ 决定 sizeof(Foo<A>)因为默认的模板参数结果为 1。为什么会这样?这是编译器错误吗?它在 Visual Studio 2015 中打印 4、4。

我使用的是 xlc 版本 z/OS V2.1 XL C/C++ .

最佳答案

这可能是编译器中的错误,已在 AIX 上修复但未在 Z 上修复

在 AIX 上测试最新(即 ptf)版本 V13.1.3 预期结果 V13.1 预期结果 V12.1 预期结果 V11.1预期结果

在 ZOS 上 V2R1 失败 V2R2 失败

如果您报告错误,我们可以将修复程序放入 V2R1。

关于c++ - xlc: 模板类的 sizeof 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41689874/

相关文章:

c++ - 如何将 C 类型可变参数转换为 C++ 样式可变参数类型?

c++ - 使用 xlc 编译器在 IBM AIX 中分配内存失败?

c++ - xlC 警告, "The NOSTRICT option has the potential to alter the semantics of a program"

c++ - 不同的对象指针值及其this指针

c++ - 使用 std::accumulate 和 std::string 有效

c++ - C++ 中的用户定义运算符

c++ - Sprintf() 错误

c++ - 我可以将 "token pasting operator"与 'const' 模板参数一起使用吗?

c++ - 使用可变参数模板展开序列范围

c++ - 将转换构造函数添加到模板的特化中