2017-01-17 7 views
3

J'utilise sizeof() dans un argument de modèle, comme ceci:xlc: sizeof de classe basé sur un modèle ne fonctionne pas

#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; 
} 

Pour certains xlc raison ++ décide sizeof(Foo<A>) que les résultats de l'argument du modèle par défaut dans 1. Pourquoi est-ce vrai? est-ce un bug de compilateur? Il imprime 4, 4 dans Visual Studio 2015.

J'utilise xlc version z/OS V2.1 XL C/C++.

+4

Bogue du compilateur? Et aussi, je ne peux pas le reproduire sur MSVC, Clang et GCC – WhiZTiM

Répondre

1

Son probablement un bogue dans le compilateur qui a été fixé sur AIX, mais pas sur Z

plus récents tests (par exemple) ptf versions sur AIX V13.1.3 résultat escompté v13.1 résultat attendu V12.1 résultat V11.1 attendu de résultat attendu

Sur ZOS V2R1 échoue V2R2 ne

Si vous signalez le bug que nous pouvons obtenir le correctif mis en V2R1.