Bir tür tam olup olmadığını kontrol etmek için bu C++ 11 özellik şablonu yazdı:Bir is_complete türü özelliğim tarafından uygulandığım bir derleyici hatası var mı?
template <typename...>
using void_t = void;
template <typename T, typename = void>
struct is_complete : std::false_type
{};
template <typename T>
struct is_complete<T, void_t<decltype(sizeof(T))>> : std::true_type
{};
ve şu şekilde test: Ben 10
yazdırmak için test programı beklenen
struct Complete {};
int main()
{
std::cout << is_complete<Complete>::value
<< is_complete<class Incomplete>::value
<< '\n';
}
ve bu clang 3.4 ile derlediğimde elde ettiğim çıktı. Ancak, gcc 4.9 ile derlendiğinde, bunun yerine
class Incomplete
'u tam olarak tanımlayarak
11
'u yazdırır.
Kodumun doğru olup olmadığını bilmiyorum, ancak yanlış olsa bile, her iki derleyicide de aynı davranmalıdır.
Soru 1: kodum doğru?
Soru 2: Derleyicilerden birinde bir hata buldum mu?
DÜZENLEME:
benim kodu için bir değiştirme için sormuyorum. Ben gcc veya clang bir hata olup olmadığını ve bu özel yapı doğru olup olmadığını soruyorum.
İlgili: http://stackoverflow.com/questions/25796126/static-assert-that-template-typename-t-is-not-complete – chris
@chris - bu bir kopya değil - soru ilgili gcc veya clang'dan hata. – Felics
Bunun bir dupe olduğunu söylemedim ya da bu şekilde kapanmaya oy verdim. Hem GCC hem de Clang'da çalışan bir şey istiyorsanız, yardımcı olur. – chris