xlc: sizeof шаблонного класса не работает

Я использую 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. Почему это так? это ошибка компилятора? Он печатает 4, 4 в Visual Studio 2015.

Я использую версию xlc z/OS V2.1 XL C/C++,

3

Решение

Вероятно, это ошибка в компиляторе, которая была исправлена ​​в AIX, но не в Z

Тестирование последних (т.е. ptf) версий в AIX
V13.1.3 ожидаемый результат
V13.1 ожидаемый результат
V12.1 ожидаемый результат
V11.1 ожидаемый результат

На ZOS
V2R1 не работает
V2R2 дает сбой

Если вы сообщите об ошибке, мы можем получить исправление в V2R1.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]