diff --git a/ostd/range.hh b/ostd/range.hh index ee14859..5598150 100644 --- a/ostd/range.hh +++ b/ostd/range.hh @@ -85,7 +85,7 @@ namespace detail { } template -static constexpr bool IsInputRange = detail::IsInputRangeBase::value; +constexpr bool IsInputRange = detail::IsInputRangeBase::value; // is forward range @@ -104,7 +104,7 @@ namespace detail { } template -static constexpr bool IsForwardRange = detail::IsForwardRangeBase::value; +constexpr bool IsForwardRange = detail::IsForwardRangeBase::value; // is bidirectional range @@ -124,7 +124,7 @@ namespace detail { detail::IsBidirectionalRangeCore::Type {}; } -template static constexpr bool IsBidirectionalRange +template constexpr bool IsBidirectionalRange = detail::IsBidirectionalRangeBase::value; // is random access range @@ -145,7 +145,7 @@ namespace detail { detail::IsRandomAccessRangeCore::Type {}; } -template static constexpr bool IsRandomAccessRange +template constexpr bool IsRandomAccessRange = detail::IsRandomAccessRangeBase::value; // is finite random access range @@ -166,12 +166,12 @@ namespace detail { detail::IsFiniteRandomAccessRangeCore::Type {}; } -template static constexpr bool IsFiniteRandomAccessRange +template constexpr bool IsFiniteRandomAccessRange = detail::IsFiniteRandomAccessRangeBase::value; // is infinite random access range -template static constexpr bool IsInfiniteRandomAccessRange +template constexpr bool IsInfiniteRandomAccessRange = IsRandomAccessRange && !IsFiniteRandomAccessRange; // is contiguous range @@ -192,7 +192,7 @@ namespace detail { detail::IsContiguousRangeCore::Type {}; } -template static constexpr bool IsContiguousRange +template constexpr bool IsContiguousRange = detail::IsContiguousRangeBase::value; // is output range @@ -225,7 +225,7 @@ namespace detail { detail::IsOutputRangeCore::Type {}; } -template static constexpr bool IsOutputRange +template constexpr bool IsOutputRange = detail::IsOutputRangeBase::value; namespace detail { diff --git a/ostd/type_traits.hh b/ostd/type_traits.hh index 484519c..b6518ac 100644 --- a/ostd/type_traits.hh +++ b/ostd/type_traits.hh @@ -116,17 +116,17 @@ namespace detail { } template -static constexpr bool IsSame = detail::IsSameBase::value; +constexpr bool IsSame = detail::IsSameBase::value; /* is void */ template -static constexpr bool IsVoid = IsSame, void>; +constexpr bool IsVoid = IsSame, void>; /* is null pointer */ template -static constexpr bool IsNullPointer = IsSame, Nullptr>; +constexpr bool IsNullPointer = IsSame, Nullptr>; /* is integer */ @@ -153,7 +153,7 @@ namespace detail { } template -static constexpr bool IsIntegral = detail::IsIntegralBase>::value; +constexpr bool IsIntegral = detail::IsIntegralBase>::value; /* is floating point */ @@ -167,7 +167,7 @@ namespace detail { } template -static constexpr bool IsFloatingPoint = detail::IsFloatingPointBase>::value; +constexpr bool IsFloatingPoint = detail::IsFloatingPointBase>::value; /* is array */ @@ -178,7 +178,7 @@ namespace detail { } template -static constexpr bool IsArray = detail::IsArrayBase::value; +constexpr bool IsArray = detail::IsArrayBase::value; /* is pointer */ @@ -188,7 +188,7 @@ namespace detail { } template -static constexpr bool IsPointer = detail::IsPointerBase>::value; +constexpr bool IsPointer = detail::IsPointerBase>::value; /* is lvalue reference */ @@ -198,7 +198,7 @@ namespace detail { } template -static constexpr bool IsLvalueReference = detail::IsLvalueReferenceBase::value; +constexpr bool IsLvalueReference = detail::IsLvalueReferenceBase::value; /* is rvalue reference */ @@ -208,24 +208,24 @@ namespace detail { } template -static constexpr bool IsRvalueReference = detail::IsRvalueReferenceBase::value; +constexpr bool IsRvalueReference = detail::IsRvalueReferenceBase::value; /* is reference */ template -static constexpr bool IsReference = IsLvalueReference || IsRvalueReference; +constexpr bool IsReference = IsLvalueReference || IsRvalueReference; /* is enum */ -template static constexpr bool IsEnum = __is_enum(T); +template constexpr bool IsEnum = __is_enum(T); /* is union */ -template static constexpr bool IsUnion = __is_union(T); +template constexpr bool IsUnion = __is_union(T); /* is class */ -template static constexpr bool IsClass = __is_class(T); +template constexpr bool IsClass = __is_class(T); /* is function */ @@ -252,23 +252,22 @@ namespace detail { } /* namespace detail */ template -static constexpr bool IsFunction = detail::IsFunctionBase::value; +constexpr bool IsFunction = detail::IsFunctionBase::value; /* is arithmetic */ template -static constexpr bool IsArithmetic = IsIntegral || IsFloatingPoint; +constexpr bool IsArithmetic = IsIntegral || IsFloatingPoint; /* is fundamental */ template -static constexpr bool IsFundamental = IsArithmetic || IsVoid || - IsNullPointer; +constexpr bool IsFundamental = IsArithmetic || IsVoid || IsNullPointer; /* is compound */ template -static constexpr bool IsCompound = !IsFundamental; +constexpr bool IsCompound = !IsFundamental; /* is pointer to member */ @@ -281,7 +280,7 @@ namespace detail { } template -static constexpr bool IsMemberPointer = detail::IsMemberPointerBase>::value; +constexpr bool IsMemberPointer = detail::IsMemberPointerBase>::value; /* is pointer to member object */ @@ -296,7 +295,7 @@ namespace detail { } template -static constexpr bool IsMemberObjectPointer = detail::IsMemberObjectPointerBase>::value; +constexpr bool IsMemberObjectPointer = detail::IsMemberObjectPointerBase>::value; /* is pointer to member function */ @@ -311,44 +310,44 @@ namespace detail { } template -static constexpr bool IsMemberFunctionPointer = detail::IsMemberFunctionPointerBase>::value; +constexpr bool IsMemberFunctionPointer = detail::IsMemberFunctionPointerBase>::value; /* is object */ template -static constexpr bool IsObject = !IsFunction && !IsVoid && !IsReference; +constexpr bool IsObject = !IsFunction && !IsVoid && !IsReference; /* is scalar */ -template static constexpr bool IsScalar +template constexpr bool IsScalar = IsMemberPointer || IsPointer || IsEnum || IsNullPointer || IsArithmetic; /* is abstract */ -template static constexpr bool IsAbstract = __is_abstract(T); +template constexpr bool IsAbstract = __is_abstract(T); /* is const */ template -static constexpr bool IsConst = IsSame; +constexpr bool IsConst = IsSame; /* is volatile */ template -static constexpr bool IsVolatile = IsSame; +constexpr bool IsVolatile = IsSame; /* is empty */ -template static constexpr bool IsEmpty = __is_empty(T); +template constexpr bool IsEmpty = __is_empty(T); /* is POD */ -template static constexpr bool IsPod = __is_pod(T); +template constexpr bool IsPod = __is_pod(T); /* is polymorphic */ -template static constexpr bool IsPolymorphic = __is_polymorphic(T); +template constexpr bool IsPolymorphic = __is_polymorphic(T); /* is signed */ @@ -364,7 +363,7 @@ namespace detail { } template -static constexpr bool IsSigned = detail::IsSignedBase::value; +constexpr bool IsSigned = detail::IsSignedBase::value; /* is unsigned */ @@ -380,31 +379,31 @@ namespace detail { } template -static constexpr bool IsUnsigned = detail::IsUnsignedBase::value; +constexpr bool IsUnsigned = detail::IsUnsignedBase::value; /* is standard layout */ template -static constexpr bool IsStandardLayout = __is_standard_layout(T); +constexpr bool IsStandardLayout = __is_standard_layout(T); /* is literal type */ template -static constexpr bool IsLiteralType = __is_literal_type(T); +constexpr bool IsLiteralType = __is_literal_type(T); /* is trivially copyable */ template -static constexpr bool IsTriviallyCopyable = IsScalar>; +constexpr bool IsTriviallyCopyable = IsScalar>; /* is trivial */ -template static constexpr bool IsTrivial = __is_trivial(T); +template constexpr bool IsTrivial = __is_trivial(T); /* has virtual destructor */ template -static constexpr bool HasVirtualDestructor = __has_virtual_destructor(T); +constexpr bool HasVirtualDestructor = __has_virtual_destructor(T); /* is constructible */ @@ -493,24 +492,24 @@ namespace detail { } /* namespace detail */ template -static constexpr bool IsConstructible = detail::Ctible::value; +constexpr bool IsConstructible = detail::Ctible::value; /* is default constructible */ template -static constexpr bool IsDefaultConstructible = IsConstructible; +constexpr bool IsDefaultConstructible = IsConstructible; /* is copy constructible */ template -static constexpr bool IsCopyConstructible = IsConstructible> >; /* is move constructible */ template -static constexpr bool IsMoveConstructible = IsConstructible >; @@ -533,12 +532,12 @@ namespace detail { } /* namespace detail */ template -static constexpr bool IsAssignable = detail::IsAssignableBase::value; +constexpr bool IsAssignable = detail::IsAssignableBase::value; /* is copy assignable */ template -static constexpr bool IsCopyAssignable = IsAssignable< +constexpr bool IsCopyAssignable = IsAssignable< AddLvalueReference, AddLvalueReference> >; @@ -546,7 +545,7 @@ static constexpr bool IsCopyAssignable = IsAssignable< /* is move assignable */ template -static constexpr bool IsMoveAssignable = IsAssignable< +constexpr bool IsMoveAssignable = IsAssignable< AddLvalueReference, const AddRvalueReference >; @@ -591,7 +590,7 @@ namespace detail { } /* namespace detail */ template -static constexpr bool IsDestructible = detail::IsDestructibleBase::value; +constexpr bool IsDestructible = detail::IsDestructibleBase::value; /* is trivially constructible */ @@ -621,22 +620,22 @@ namespace detail { } /* namespace detail */ template -static constexpr bool IsTriviallyConstructible +constexpr bool IsTriviallyConstructible = detail::IsTriviallyConstructibleBase::value; /* is trivially default constructible */ -template static constexpr bool IsTriviallyDefaultConstructible +template constexpr bool IsTriviallyDefaultConstructible = IsTriviallyConstructible; /* is trivially copy constructible */ -template static constexpr bool IsTriviallyCopyConstructible +template constexpr bool IsTriviallyCopyConstructible = IsTriviallyConstructible>; /* is trivially move constructible */ -template static constexpr bool IsTriviallyMoveConstructible +template constexpr bool IsTriviallyMoveConstructible = IsTriviallyConstructible>; /* is trivially assignable */ @@ -667,28 +666,28 @@ namespace detail { } /* namespace detail */ template -static constexpr bool IsTriviallyAssignable +constexpr bool IsTriviallyAssignable = detail::IsTriviallyAssignableBase::value; /* is trivially copy assignable */ -template static constexpr bool IsTriviallyCopyAssignable +template constexpr bool IsTriviallyCopyAssignable = IsTriviallyAssignable>; /* is trivially move assignable */ -template static constexpr bool IsTriviallyMoveAssignable +template constexpr bool IsTriviallyMoveAssignable = IsTriviallyAssignable>; /* is trivially destructible */ template -static constexpr bool IsTriviallyDestructible = __has_trivial_destructor(T); +constexpr bool IsTriviallyDestructible = __has_trivial_destructor(T); /* is base of */ template -static constexpr bool IsBaseOf = __is_base_of(B, D); +constexpr bool IsBaseOf = __is_base_of(B, D); /* is convertible */ @@ -713,7 +712,7 @@ namespace detail { }; } -template static constexpr bool IsConvertible +template constexpr bool IsConvertible = detail::IsConvertibleBase::Type::value; /* extent */ @@ -738,7 +737,7 @@ namespace detail { } /* namespace detail */ template -static constexpr Size Extent = detail::ExtentBase::value; +constexpr Size Extent = detail::ExtentBase::value; /* rank */ @@ -753,7 +752,7 @@ namespace detail { } template -static constexpr Size Rank = detail::RankBase::value; +constexpr Size Rank = detail::RankBase::value; /* remove const, volatile, cv */