Index: docs/LanguageExtensions.rst =================================================================== --- docs/LanguageExtensions.rst +++ docs/LanguageExtensions.rst @@ -1022,6 +1022,7 @@ * ``__is_nothrow_assignable`` (MSVC 2013, clang) * ``__is_constructible`` (MSVC 2013, clang) * ``__is_nothrow_constructible`` (MSVC 2013, clang) +* ``__is_assignable`` (MSVC 2015, clang) Blocks ====== Index: include/clang/Basic/TokenKinds.def =================================================================== --- include/clang/Basic/TokenKinds.def +++ include/clang/Basic/TokenKinds.def @@ -407,6 +407,9 @@ TYPE_TRAIT_N(__is_constructible, IsConstructible, KEYCXX) TYPE_TRAIT_N(__is_nothrow_constructible, IsNothrowConstructible, KEYCXX) +// MSVC14.0 / VS2015 Type Traits +TYPE_TRAIT_2(__is_assignable, IsAssignable, KEYCXX) + // GNU and MS Type Traits TYPE_TRAIT_1(__has_nothrow_assign, HasNothrowAssign, KEYCXX) TYPE_TRAIT_1(__has_nothrow_move_assign, HasNothrowMoveAssign, KEYCXX) Index: include/clang/Basic/TypeTraits.h =================================================================== --- include/clang/Basic/TypeTraits.h +++ include/clang/Basic/TypeTraits.h @@ -1,100 +1,101 @@ -//===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// \brief Defines enumerations for the type traits support. -/// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_BASIC_TYPETRAITS_H -#define LLVM_CLANG_BASIC_TYPETRAITS_H - -namespace clang { - - /// \brief Names for traits that operate specifically on types. - enum TypeTrait { - UTT_HasNothrowAssign, - UTT_HasNothrowMoveAssign, - UTT_HasNothrowCopy, - UTT_HasNothrowConstructor, - UTT_HasTrivialAssign, - UTT_HasTrivialMoveAssign, - UTT_HasTrivialCopy, - UTT_HasTrivialDefaultConstructor, - UTT_HasTrivialMoveConstructor, - UTT_HasTrivialDestructor, - UTT_HasVirtualDestructor, - UTT_IsAbstract, - UTT_IsArithmetic, - UTT_IsArray, - UTT_IsClass, - UTT_IsCompleteType, - UTT_IsCompound, - UTT_IsConst, - UTT_IsDestructible, - UTT_IsEmpty, - UTT_IsEnum, - UTT_IsFinal, - UTT_IsFloatingPoint, - UTT_IsFunction, - UTT_IsFundamental, - UTT_IsIntegral, - UTT_IsInterfaceClass, - UTT_IsLiteral, - UTT_IsLvalueReference, - UTT_IsMemberFunctionPointer, - UTT_IsMemberObjectPointer, - UTT_IsMemberPointer, - UTT_IsNothrowDestructible, - UTT_IsObject, - UTT_IsPOD, - UTT_IsPointer, - UTT_IsPolymorphic, - UTT_IsReference, - UTT_IsRvalueReference, - UTT_IsScalar, - UTT_IsSealed, - UTT_IsSigned, - UTT_IsStandardLayout, - UTT_IsTrivial, - UTT_IsTriviallyCopyable, - UTT_IsUnion, - UTT_IsUnsigned, - UTT_IsVoid, - UTT_IsVolatile, - UTT_Last = UTT_IsVolatile, - BTT_IsBaseOf, - BTT_IsConvertible, - BTT_IsConvertibleTo, - BTT_IsSame, - BTT_TypeCompatible, - BTT_IsNothrowAssignable, - BTT_IsTriviallyAssignable, - BTT_Last = BTT_IsTriviallyAssignable, - TT_IsConstructible, - TT_IsNothrowConstructible, - TT_IsTriviallyConstructible - }; - - /// \brief Names for the array type traits. - enum ArrayTypeTrait { - ATT_ArrayRank, - ATT_ArrayExtent - }; - - /// \brief Names for the "expression or type" traits. - enum UnaryExprOrTypeTrait { - UETT_SizeOf, - UETT_AlignOf, - UETT_VecStep, - UETT_OpenMPRequiredSimdAlign, - }; -} - -#endif +//===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief Defines enumerations for the type traits support. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_BASIC_TYPETRAITS_H +#define LLVM_CLANG_BASIC_TYPETRAITS_H + +namespace clang { + + /// \brief Names for traits that operate specifically on types. + enum TypeTrait { + UTT_HasNothrowAssign, + UTT_HasNothrowMoveAssign, + UTT_HasNothrowCopy, + UTT_HasNothrowConstructor, + UTT_HasTrivialAssign, + UTT_HasTrivialMoveAssign, + UTT_HasTrivialCopy, + UTT_HasTrivialDefaultConstructor, + UTT_HasTrivialMoveConstructor, + UTT_HasTrivialDestructor, + UTT_HasVirtualDestructor, + UTT_IsAbstract, + UTT_IsArithmetic, + UTT_IsArray, + UTT_IsClass, + UTT_IsCompleteType, + UTT_IsCompound, + UTT_IsConst, + UTT_IsDestructible, + UTT_IsEmpty, + UTT_IsEnum, + UTT_IsFinal, + UTT_IsFloatingPoint, + UTT_IsFunction, + UTT_IsFundamental, + UTT_IsIntegral, + UTT_IsInterfaceClass, + UTT_IsLiteral, + UTT_IsLvalueReference, + UTT_IsMemberFunctionPointer, + UTT_IsMemberObjectPointer, + UTT_IsMemberPointer, + UTT_IsNothrowDestructible, + UTT_IsObject, + UTT_IsPOD, + UTT_IsPointer, + UTT_IsPolymorphic, + UTT_IsReference, + UTT_IsRvalueReference, + UTT_IsScalar, + UTT_IsSealed, + UTT_IsSigned, + UTT_IsStandardLayout, + UTT_IsTrivial, + UTT_IsTriviallyCopyable, + UTT_IsUnion, + UTT_IsUnsigned, + UTT_IsVoid, + UTT_IsVolatile, + UTT_Last = UTT_IsVolatile, + BTT_IsBaseOf, + BTT_IsConvertible, + BTT_IsConvertibleTo, + BTT_IsSame, + BTT_TypeCompatible, + BTT_IsAssignable, + BTT_IsNothrowAssignable, + BTT_IsTriviallyAssignable, + BTT_Last = BTT_IsTriviallyAssignable, + TT_IsConstructible, + TT_IsNothrowConstructible, + TT_IsTriviallyConstructible + }; + + /// \brief Names for the array type traits. + enum ArrayTypeTrait { + ATT_ArrayRank, + ATT_ArrayExtent + }; + + /// \brief Names for the "expression or type" traits. + enum UnaryExprOrTypeTrait { + UETT_SizeOf, + UETT_AlignOf, + UETT_VecStep, + UETT_OpenMPRequiredSimdAlign, + }; +} + +#endif Index: lib/Parse/ParseDeclCXX.cpp =================================================================== --- lib/Parse/ParseDeclCXX.cpp +++ lib/Parse/ParseDeclCXX.cpp @@ -56,8 +56,8 @@ /// 'namespace' identifier '=' qualified-namespace-specifier ';' /// Parser::DeclGroupPtrTy Parser::ParseNamespace(unsigned Context, - SourceLocation &DeclEnd, - SourceLocation InlineLoc) { + SourceLocation &DeclEnd, + SourceLocation InlineLoc) { assert(Tok.is(tok::kw_namespace) && "Not a namespace!"); SourceLocation NamespaceLoc = ConsumeToken(); // eat the 'namespace'. ObjCDeclContextSwitch ObjCDC(*this); @@ -118,7 +118,7 @@ << FixItHint::CreateRemoval(InlineLoc); Decl *NSAlias = ParseNamespaceAlias(NamespaceLoc, IdentLoc, Ident, DeclEnd); return Actions.ConvertDeclToDeclGroup(NSAlias); -} + } BalancedDelimiterTracker T(*this, tok::l_brace); if (T.consumeOpen()) { @@ -200,7 +200,7 @@ DeclEnd = T.getCloseLocation(); Actions.ActOnFinishNamespaceDef(NamespcDecl, DeclEnd); - + return Actions.ConvertDeclToDeclGroup(NamespcDecl, ImplicitUsingDirectiveDecl); } @@ -1269,6 +1269,7 @@ Tok.isOneOf(tok::kw___is_abstract, tok::kw___is_arithmetic, tok::kw___is_array, + tok::kw___is_assignable, tok::kw___is_base_of, tok::kw___is_class, tok::kw___is_complete_type, @@ -2249,7 +2250,7 @@ /// Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, - AttributeList *AccessAttrs, + AttributeList *AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) { if (Tok.is(tok::at)) { @@ -2316,7 +2317,7 @@ return DeclGroupPtrTy::make(DeclGroupRef(Actions.ActOnUsingDeclaration( getCurScope(), AS, /* HasUsingKeyword */ false, SourceLocation(), SS, Name, - /* AttrList */ nullptr, + /* AttrList */ nullptr, /* HasTypenameKeyword */ false, SourceLocation()))); } } @@ -2370,8 +2371,8 @@ SkipUntil(tok::semi, StopBeforeMatch); return nullptr; } - SourceLocation DeclEnd; - // Otherwise, it must be a using-declaration or an alias-declaration. + SourceLocation DeclEnd; + // Otherwise, it must be a using-declaration or an alias-declaration. return DeclGroupPtrTy::make(DeclGroupRef(ParseUsingDeclaration( Declarator::MemberContext, TemplateInfo, UsingLoc, DeclEnd, AS))); } @@ -3092,7 +3093,7 @@ // Each iteration of this loop reads one member-declaration. ParseCXXClassMemberDeclarationWithPragmas( CurAS, AccessAttrs, static_cast(TagType), TagDecl); - } + } T.consumeClose(); } else { SkipUntil(tok::r_brace); Index: lib/Parse/ParseExpr.cpp =================================================================== --- lib/Parse/ParseExpr.cpp +++ lib/Parse/ParseExpr.cpp @@ -796,6 +796,7 @@ REVERTIBLE_TYPE_TRAIT(__is_abstract); REVERTIBLE_TYPE_TRAIT(__is_arithmetic); REVERTIBLE_TYPE_TRAIT(__is_array); + REVERTIBLE_TYPE_TRAIT(__is_assignable); REVERTIBLE_TYPE_TRAIT(__is_base_of); REVERTIBLE_TYPE_TRAIT(__is_class); REVERTIBLE_TYPE_TRAIT(__is_complete_type); @@ -1369,7 +1370,7 @@ Diag(PostfixExpr->getExprLoc(), diag::err_opencl_taking_function_address_parser); return ExprError(); - } +} } return Res; @@ -1476,8 +1477,8 @@ LHS = Actions.ActOnOMPArraySectionExpr(LHS.get(), Loc, Idx.get(), ColonLoc, Length.get(), RLoc); } else { - LHS = Actions.ActOnArraySubscriptExpr(getCurScope(), LHS.get(), Loc, - Idx.get(), RLoc); + LHS = Actions.ActOnArraySubscriptExpr(getCurScope(), LHS.get(), Loc, + Idx.get(), RLoc); } } else { LHS = ExprError(); Index: lib/Sema/SemaExprCXX.cpp =================================================================== --- lib/Sema/SemaExprCXX.cpp +++ lib/Sema/SemaExprCXX.cpp @@ -3722,8 +3722,8 @@ Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr); return true; - // C++0x [meta.unary.prop] Table 49 requires the following traits to be - // applied to a complete type. + // C++0x [meta.unary.prop] Table 49 requires the following traits to be + // applied to a complete type. case UTT_IsTrivial: case UTT_IsTriviallyCopyable: case UTT_IsStandardLayout: @@ -4459,6 +4459,7 @@ return !Result.isInvalid() && !SFINAE.hasErrorOccurred(); } + case BTT_IsAssignable: case BTT_IsNothrowAssignable: case BTT_IsTriviallyAssignable: { // C++11 [meta.unary.prop]p3: @@ -4519,6 +4520,10 @@ return !Result.get()->hasNonTrivialCall(Self.Context); } + if (BTT == BTT_IsAssignable) { + return true; + } + llvm_unreachable("unhandled type trait"); return false; } Index: test/PCH/cxx-traits.h =================================================================== --- test/PCH/cxx-traits.h +++ test/PCH/cxx-traits.h @@ -1,69 +1,70 @@ -// Header for PCH test cxx-traits.cpp - -namespace n { - -template -struct __is_pod { // expected-warning {{keyword '__is_pod' will be made available as an identifier for the remainder of the translation unit}} - enum { __value }; -}; - -template -struct __is_empty { // expected-warning {{keyword '__is_empty' will be made available as an identifier for the remainder of the translation unit}} - enum { __value }; -}; - -template -struct is_trivially_constructible { - static const bool value = __is_trivially_constructible(T, Args...); -}; - -struct __is_abstract {}; // expected-warning {{made available}} -struct __is_arithmetic {}; // expected-warning {{made available}} -struct __is_array {}; // expected-warning {{made available}} -struct __is_base_of {}; // expected-warning {{made available}} -struct __is_class {}; // expected-warning {{made available}} -struct __is_complete_type {}; // expected-warning {{made available}} -struct __is_compound {}; // expected-warning {{made available}} -struct __is_const {}; // expected-warning {{made available}} -struct __is_constructible {}; // expected-warning {{made available}} -struct __is_convertible {}; // expected-warning {{made available}} -struct __is_convertible_to {}; // expected-warning {{made available}} -struct __is_destructible {}; // expected-warning {{made available}} -struct __is_enum {}; // expected-warning {{made available}} -struct __is_floating_point {}; // expected-warning {{made available}} -struct __is_final {}; // expected-warning {{made available}} -struct __is_function {}; // expected-warning {{made available}} -struct __is_fundamental {}; // expected-warning {{made available}} -struct __is_integral {}; // expected-warning {{made available}} -struct __is_interface_class {}; // expected-warning {{made available}} -struct __is_literal {}; // expected-warning {{made available}} -struct __is_lvalue_expr {}; // expected-warning {{made available}} -struct __is_lvalue_reference {}; // expected-warning {{made available}} -struct __is_member_function_pointer {}; // expected-warning {{made available}} -struct __is_member_object_pointer {}; // expected-warning {{made available}} -struct __is_member_pointer {}; // expected-warning {{made available}} -struct __is_nothrow_assignable {}; // expected-warning {{made available}} -struct __is_nothrow_constructible {}; // expected-warning {{made available}} -struct __is_nothrow_destructible {}; // expected-warning {{made available}} -struct __is_object {}; // expected-warning {{made available}} -struct __is_pointer {}; // expected-warning {{made available}} -struct __is_polymorphic {}; // expected-warning {{made available}} -struct __is_reference {}; // expected-warning {{made available}} -struct __is_rvalue_expr {}; // expected-warning {{made available}} -struct __is_rvalue_reference {}; // expected-warning {{made available}} -struct __is_same {}; // expected-warning {{made available}} -struct __is_scalar {}; // expected-warning {{made available}} -struct __is_sealed {}; // expected-warning {{made available}} -struct __is_signed {}; // expected-warning {{made available}} -struct __is_standard_layout {}; // expected-warning {{made available}} -struct __is_trivial {}; // expected-warning {{made available}} -struct __is_trivially_assignable {}; // expected-warning {{made available}} -struct __is_trivially_constructible {}; // expected-warning {{made available}} -struct __is_trivially_copyable {}; // expected-warning {{made available}} -struct __is_union {}; // expected-warning {{made available}} -struct __is_unsigned {}; // expected-warning {{made available}} -struct __is_void {}; // expected-warning {{made available}} -struct __is_volatile {}; // expected-warning {{made available}} - - -} +// Header for PCH test cxx-traits.cpp + +namespace n { + +template +struct __is_pod { // expected-warning {{keyword '__is_pod' will be made available as an identifier for the remainder of the translation unit}} + enum { __value }; +}; + +template +struct __is_empty { // expected-warning {{keyword '__is_empty' will be made available as an identifier for the remainder of the translation unit}} + enum { __value }; +}; + +template +struct is_trivially_constructible { + static const bool value = __is_trivially_constructible(T, Args...); +}; + +struct __is_abstract {}; // expected-warning {{made available}} +struct __is_arithmetic {}; // expected-warning {{made available}} +struct __is_array {}; // expected-warning {{made available}} +struct __is_assignable {}; // expected-warning {{made available}} +struct __is_base_of {}; // expected-warning {{made available}} +struct __is_class {}; // expected-warning {{made available}} +struct __is_complete_type {}; // expected-warning {{made available}} +struct __is_compound {}; // expected-warning {{made available}} +struct __is_const {}; // expected-warning {{made available}} +struct __is_constructible {}; // expected-warning {{made available}} +struct __is_convertible {}; // expected-warning {{made available}} +struct __is_convertible_to {}; // expected-warning {{made available}} +struct __is_destructible {}; // expected-warning {{made available}} +struct __is_enum {}; // expected-warning {{made available}} +struct __is_floating_point {}; // expected-warning {{made available}} +struct __is_final {}; // expected-warning {{made available}} +struct __is_function {}; // expected-warning {{made available}} +struct __is_fundamental {}; // expected-warning {{made available}} +struct __is_integral {}; // expected-warning {{made available}} +struct __is_interface_class {}; // expected-warning {{made available}} +struct __is_literal {}; // expected-warning {{made available}} +struct __is_lvalue_expr {}; // expected-warning {{made available}} +struct __is_lvalue_reference {}; // expected-warning {{made available}} +struct __is_member_function_pointer {}; // expected-warning {{made available}} +struct __is_member_object_pointer {}; // expected-warning {{made available}} +struct __is_member_pointer {}; // expected-warning {{made available}} +struct __is_nothrow_assignable {}; // expected-warning {{made available}} +struct __is_nothrow_constructible {}; // expected-warning {{made available}} +struct __is_nothrow_destructible {}; // expected-warning {{made available}} +struct __is_object {}; // expected-warning {{made available}} +struct __is_pointer {}; // expected-warning {{made available}} +struct __is_polymorphic {}; // expected-warning {{made available}} +struct __is_reference {}; // expected-warning {{made available}} +struct __is_rvalue_expr {}; // expected-warning {{made available}} +struct __is_rvalue_reference {}; // expected-warning {{made available}} +struct __is_same {}; // expected-warning {{made available}} +struct __is_scalar {}; // expected-warning {{made available}} +struct __is_sealed {}; // expected-warning {{made available}} +struct __is_signed {}; // expected-warning {{made available}} +struct __is_standard_layout {}; // expected-warning {{made available}} +struct __is_trivial {}; // expected-warning {{made available}} +struct __is_trivially_assignable {}; // expected-warning {{made available}} +struct __is_trivially_constructible {}; // expected-warning {{made available}} +struct __is_trivially_copyable {}; // expected-warning {{made available}} +struct __is_union {}; // expected-warning {{made available}} +struct __is_unsigned {}; // expected-warning {{made available}} +struct __is_void {}; // expected-warning {{made available}} +struct __is_volatile {}; // expected-warning {{made available}} + + +} Index: test/PCH/cxx-traits.cpp =================================================================== --- test/PCH/cxx-traits.cpp +++ test/PCH/cxx-traits.cpp @@ -1,66 +1,67 @@ -// Test this without pch. -// RUN: %clang_cc1 -fms-extensions -include %S/cxx-traits.h -std=c++11 -fsyntax-only -verify %s - -// RUN: %clang_cc1 -fms-extensions -x c++-header -std=c++11 -emit-pch -o %t %S/cxx-traits.h -// RUN: %clang_cc1 -fms-extensions -std=c++11 -include-pch %t -DPCH -fsyntax-only -verify %s - -#ifdef PCH -// expected-no-diagnostics -#endif - -bool _Is_pod_comparator = n::__is_pod::__value; -bool _Is_empty_check = n::__is_empty::__value; - -bool default_construct_int = n::is_trivially_constructible::value; -bool copy_construct_int = n::is_trivially_constructible::value; - -// The built-ins should still work too: -bool _is_abstract_result = __is_abstract(int); -bool _is_arithmetic_result = __is_arithmetic(int); -bool _is_array_result = __is_array(int); -bool _is_base_of_result = __is_base_of(int, int); -bool _is_class_result = __is_class(int); -bool _is_complete_type_result = __is_complete_type(int); -bool _is_compound_result = __is_compound(int); -bool _is_const_result = __is_const(int); -bool _is_constructible_result = __is_constructible(int); -bool _is_convertible_result = __is_convertible(int, int); -bool _is_convertible_to_result = __is_convertible_to(int, int); -bool _is_destructible_result = __is_destructible(int); -bool _is_empty_result = __is_empty(int); -bool _is_enum_result = __is_enum(int); -bool _is_floating_point_result = __is_floating_point(int); -bool _is_final_result = __is_final(int); -bool _is_function_result = __is_function(int); -bool _is_fundamental_result = __is_fundamental(int); -bool _is_integral_result = __is_integral(int); -bool _is_interface_class_result = __is_interface_class(int); -bool _is_literal_result = __is_literal(int); -bool _is_lvalue_expr_result = __is_lvalue_expr(0); -bool _is_lvalue_reference_result = __is_lvalue_reference(int); -bool _is_member_function_pointer_result = __is_member_function_pointer(int); -bool _is_member_object_pointer_result = __is_member_object_pointer(int); -bool _is_member_pointer_result = __is_member_pointer(int); -bool _is_nothrow_assignable_result = __is_nothrow_assignable(int, int); -bool _is_nothrow_constructible_result = __is_nothrow_constructible(int); -bool _is_nothrow_destructible_result = __is_nothrow_destructible(int); -bool _is_object_result = __is_object(int); -bool _is_pod_result = __is_pod(int); -bool _is_pointer_result = __is_pointer(int); -bool _is_polymorphic_result = __is_polymorphic(int); -bool _is_reference_result = __is_reference(int); -bool _is_rvalue_expr_result = __is_rvalue_expr(0); -bool _is_rvalue_reference_result = __is_rvalue_reference(int); -bool _is_same_result = __is_same(int, int); -bool _is_scalar_result = __is_scalar(int); -bool _is_sealed_result = __is_sealed(int); -bool _is_signed_result = __is_signed(int); -bool _is_standard_layout_result = __is_standard_layout(int); -bool _is_trivial_result = __is_trivial(int); -bool _is_trivially_assignable_result = __is_trivially_assignable(int, int); -bool _is_trivially_constructible_result = __is_trivially_constructible(int); -bool _is_trivially_copyable_result = __is_trivially_copyable(int); -bool _is_union_result = __is_union(int); -bool _is_unsigned_result = __is_unsigned(int); -bool _is_void_result = __is_void(int); -bool _is_volatile_result = __is_volatile(int); +// Test this without pch. +// RUN: %clang_cc1 -fms-extensions -include %S/cxx-traits.h -std=c++11 -fsyntax-only -verify %s + +// RUN: %clang_cc1 -fms-extensions -x c++-header -std=c++11 -emit-pch -o %t %S/cxx-traits.h +// RUN: %clang_cc1 -fms-extensions -std=c++11 -include-pch %t -DPCH -fsyntax-only -verify %s + +#ifdef PCH +// expected-no-diagnostics +#endif + +bool _Is_pod_comparator = n::__is_pod::__value; +bool _Is_empty_check = n::__is_empty::__value; + +bool default_construct_int = n::is_trivially_constructible::value; +bool copy_construct_int = n::is_trivially_constructible::value; + +// The built-ins should still work too: +bool _is_abstract_result = __is_abstract(int); +bool _is_arithmetic_result = __is_arithmetic(int); +bool _is_array_result = __is_array(int); +bool _is_assignable_result = __is_assignable(int, int); +bool _is_base_of_result = __is_base_of(int, int); +bool _is_class_result = __is_class(int); +bool _is_complete_type_result = __is_complete_type(int); +bool _is_compound_result = __is_compound(int); +bool _is_const_result = __is_const(int); +bool _is_constructible_result = __is_constructible(int); +bool _is_convertible_result = __is_convertible(int, int); +bool _is_convertible_to_result = __is_convertible_to(int, int); +bool _is_destructible_result = __is_destructible(int); +bool _is_empty_result = __is_empty(int); +bool _is_enum_result = __is_enum(int); +bool _is_floating_point_result = __is_floating_point(int); +bool _is_final_result = __is_final(int); +bool _is_function_result = __is_function(int); +bool _is_fundamental_result = __is_fundamental(int); +bool _is_integral_result = __is_integral(int); +bool _is_interface_class_result = __is_interface_class(int); +bool _is_literal_result = __is_literal(int); +bool _is_lvalue_expr_result = __is_lvalue_expr(0); +bool _is_lvalue_reference_result = __is_lvalue_reference(int); +bool _is_member_function_pointer_result = __is_member_function_pointer(int); +bool _is_member_object_pointer_result = __is_member_object_pointer(int); +bool _is_member_pointer_result = __is_member_pointer(int); +bool _is_nothrow_assignable_result = __is_nothrow_assignable(int, int); +bool _is_nothrow_constructible_result = __is_nothrow_constructible(int); +bool _is_nothrow_destructible_result = __is_nothrow_destructible(int); +bool _is_object_result = __is_object(int); +bool _is_pod_result = __is_pod(int); +bool _is_pointer_result = __is_pointer(int); +bool _is_polymorphic_result = __is_polymorphic(int); +bool _is_reference_result = __is_reference(int); +bool _is_rvalue_expr_result = __is_rvalue_expr(0); +bool _is_rvalue_reference_result = __is_rvalue_reference(int); +bool _is_same_result = __is_same(int, int); +bool _is_scalar_result = __is_scalar(int); +bool _is_sealed_result = __is_sealed(int); +bool _is_signed_result = __is_signed(int); +bool _is_standard_layout_result = __is_standard_layout(int); +bool _is_trivial_result = __is_trivial(int); +bool _is_trivially_assignable_result = __is_trivially_assignable(int, int); +bool _is_trivially_constructible_result = __is_trivially_constructible(int); +bool _is_trivially_copyable_result = __is_trivially_copyable(int); +bool _is_union_result = __is_union(int); +bool _is_unsigned_result = __is_unsigned(int); +bool _is_void_result = __is_void(int); +bool _is_volatile_result = __is_volatile(int);