I'm using sizeof() inside a template argument, like this:
#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;
}
For some reason xlc++ decides that sizeof(Foo<A>)
as the default template argument results in 1. Why is that so? is this a compiler bug? It prints 4, 4 in Visual Studio 2015.
I'm using xlc version z/OS V2.1 XL C/C++
.