Я использую 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++
,
Вероятно, это ошибка в компиляторе, которая была исправлена в AIX, но не в Z
Тестирование последних (т.е. ptf) версий в AIX
V13.1.3 ожидаемый результат
V13.1 ожидаемый результат
V12.1 ожидаемый результат
V11.1 ожидаемый результат
На ZOS
V2R1 не работает
V2R2 дает сбой
Если вы сообщите об ошибке, мы можем получить исправление в V2R1.
Других решений пока нет …