TRLC Platform Library  1.0.0
Header-only C++ library for compile-time platform detection and abstraction
traits.hpp File Reference

Advanced template specializations and metaprogramming utilities. More...

#include <cstddef>
#include <type_traits>
#include "trlc/platform/features.hpp"

Go to the source code of this file.

Classes

struct  trlc::platform::traits::FeatureAvailable< TFeature >
 Type trait to check if a language feature is available. More...
 
struct  trlc::platform::traits::AllFeaturesAvailable< Features >
 Type trait to check if ALL features are available. More...
 
struct  trlc::platform::traits::AnyFeatureAvailable< Features >
 Type trait to check if ANY feature is available. More...
 
struct  trlc::platform::traits::RuntimeFeatureAvailable< TFeature >
 Type trait for runtime feature availability (non-constexpr) More...
 

Namespaces

 trlc
 
 trlc::platform
 
 trlc::platform::traits
 

Macros

#define TRLC_HAS_LANGUAGE_FEATURE(feature)    (trlc::platform::hasFeature<trlc::platform::LanguageFeature::feature>())
 Macro for testing specific language feature availability. More...
 
#define TRLC_HAS_RUNTIME_FEATURE(feature)    (trlc::platform::hasRuntimeFeature<trlc::platform::RuntimeFeature::feature>())
 Macro for testing specific runtime feature availability. More...
 
#define TRLC_IF_LANGUAGE_FEATURE(feature)    if constexpr (trlc::platform::hasFeature<trlc::platform::LanguageFeature::feature>())
 Macro for conditional compilation based on language feature. More...
 
#define TRLC_IF_NO_LANGUAGE_FEATURE(feature)    if constexpr (!trlc::platform::hasFeature<trlc::platform::LanguageFeature::feature>())
 Macro for conditional compilation when language feature is NOT available. More...
 
#define TRLC_REQUIRE_FEATURE(feature)
 Macro for template specialization based on feature availability. More...
 
#define TRLC_REQUIRE_NO_FEATURE(feature)
 Macro for template specialization when feature is NOT available. More...
 
#define TRLC_HAS_ALL_FEATURES(...)   (trlc::platform::traits::hasAllFeatures<__VA_ARGS__>())
 Macro for testing multiple feature requirements. More...
 
#define TRLC_HAS_ANY_FEATURES(...)   (trlc::platform::traits::hasAnyFeature<__VA_ARGS__>())
 Macro for testing if any feature is available. More...
 

Typedefs

template<bool B, class T = void>
using trlc::platform::traits::enable_if_t = typename std::enable_if< B, T >::type
 
template<bool B>
using trlc::platform::traits::bool_constant = std::integral_constant< bool, B >
 
template<LanguageFeature TFeature>
using trlc::platform::traits::enable_if_feature_t = enable_if_t< hasFeature< TFeature >()>
 SFINAE helper to enable template only if feature is available. More...
 
template<LanguageFeature TFeature>
using trlc::platform::traits::enable_if_no_feature_t = enable_if_t<!hasFeature< TFeature >()>
 SFINAE helper to enable template only if feature is NOT available. More...
 
template<LanguageFeature... Features>
using trlc::platform::traits::enable_if_all_features_t = enable_if_t<(hasFeature< Features >() &&...)>
 SFINAE helper to enable template only if ALL features are available. More...
 
template<LanguageFeature... Features>
using trlc::platform::traits::enable_if_any_feature_t = enable_if_t<(hasFeature< Features >()||...)>
 SFINAE helper to enable template only if ANY feature is available. More...
 

Functions

template<>
static bool trlc::platform::hasFeature< LanguageFeature::exceptions > ()
 Template specializations for specific language features Provides optimized compile-time constants for individual features. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::rtti > ()
 Specialization for RTTI - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::threads > ()
 Specialization for threads - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::atomic_operations > ()
 Specialization for atomic operations - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::inline_assembly > ()
 Specialization for inline assembly - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::vector_intrinsics > ()
 Specialization for vector intrinsics - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::stack_protection > ()
 Specialization for stack protection - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::address_sanitizer > ()
 Specialization for AddressSanitizer - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::thread_sanitizer > ()
 Specialization for ThreadSanitizer - Direct function call for better optimization. More...
 
template<>
static bool trlc::platform::hasFeature< LanguageFeature::memory_sanitizer > ()
 Specialization for MemorySanitizer - Direct function call for better optimization. More...
 
template<RuntimeFeature TFeature>
bool trlc::platform::hasRuntimeFeature ()
 Template function for runtime feature testing. More...
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::sse > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::sse2 > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::sse3 > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::sse4_1 > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::sse4_2 > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::avx > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::avx2 > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::avx512f > ()
 
template<>
bool trlc::platform::hasRuntimeFeature< RuntimeFeature::neon > ()
 
template<LanguageFeature... Features>
static bool trlc::platform::traits::hasAllFeatures ()
 Check if ALL specified features are available. More...
 
template<LanguageFeature... Features>
static bool trlc::platform::traits::hasAnyFeature ()
 Check if ANY of the specified features are available. More...
 
template<LanguageFeature... Features>
static std::size_t trlc::platform::traits::countAvailableFeatures ()
 Count how many of the specified features are available. More...
 
template<LanguageFeature TFeature>
static bool trlc::platform::traits::getFeatureConstant ()
 Get compile-time constant for a language feature. More...
 

Variables

template<LanguageFeature TFeature>
static bool trlc::platform::traits::feature_available_v = FeatureAvailable<TFeature>::value
 Variable template for FeatureAvailable (C++14+) More...
 
template<LanguageFeature... Features>
static bool trlc::platform::traits::all_features_available_v = AllFeaturesAvailable<Features...>::value
 Variable template for AllFeaturesAvailable. More...
 
template<LanguageFeature... Features>
static bool trlc::platform::traits::any_feature_available_v = AnyFeatureAvailable<Features...>::value
 Variable template for AnyFeatureAvailable. More...
 
template<LanguageFeature TFeature>
static bool trlc::platform::traits::feature_constant_v = getFeatureConstant<TFeature>()
 Template variable for feature constants (C++14+) More...
 

Detailed Description

Advanced template specializations and metaprogramming utilities.

This header provides template specializations and advanced metaprogramming utilities for feature detection, extending the basic feature detection capabilities with type-safe compile-time and platform-specific features.

Author
TRLC Platform Team
Date
2025

Definition in file traits.hpp.

Macro Definition Documentation

◆ TRLC_HAS_ALL_FEATURES

#define TRLC_HAS_ALL_FEATURES (   ...)    (trlc::platform::traits::hasAllFeatures<__VA_ARGS__>())

Macro for testing multiple feature requirements.

Parameters
...Variadic list of LanguageFeature enum values (without namespace)

Definition at line 377 of file traits.hpp.

◆ TRLC_HAS_ANY_FEATURES

#define TRLC_HAS_ANY_FEATURES (   ...)    (trlc::platform::traits::hasAnyFeature<__VA_ARGS__>())

Macro for testing if any feature is available.

Parameters
...Variadic list of LanguageFeature enum values (without namespace)

Definition at line 383 of file traits.hpp.

◆ TRLC_HAS_LANGUAGE_FEATURE

#define TRLC_HAS_LANGUAGE_FEATURE (   feature)     (trlc::platform::hasFeature<trlc::platform::LanguageFeature::feature>())

Macro for testing specific language feature availability.

Parameters
featureLanguageFeature enum value (without namespace)

Definition at line 333 of file traits.hpp.

◆ TRLC_HAS_RUNTIME_FEATURE

#define TRLC_HAS_RUNTIME_FEATURE (   feature)     (trlc::platform::hasRuntimeFeature<trlc::platform::RuntimeFeature::feature>())

Macro for testing specific runtime feature availability.

Parameters
featureRuntimeFeature enum value (without namespace)

Definition at line 340 of file traits.hpp.

◆ TRLC_IF_LANGUAGE_FEATURE

#define TRLC_IF_LANGUAGE_FEATURE (   feature)     if constexpr (trlc::platform::hasFeature<trlc::platform::LanguageFeature::feature>())

Macro for conditional compilation based on language feature.

Parameters
featureLanguageFeature enum value (without namespace)

Definition at line 347 of file traits.hpp.

◆ TRLC_IF_NO_LANGUAGE_FEATURE

#define TRLC_IF_NO_LANGUAGE_FEATURE (   feature)     if constexpr (!trlc::platform::hasFeature<trlc::platform::LanguageFeature::feature>())

Macro for conditional compilation when language feature is NOT available.

Parameters
featureLanguageFeature enum value (without namespace)

Definition at line 354 of file traits.hpp.

◆ TRLC_REQUIRE_FEATURE

#define TRLC_REQUIRE_FEATURE (   feature)
Value:
trlc::platform::LanguageFeature::feature>>
enable_if_t< hasFeature< TFeature >()> enable_if_feature_t
SFINAE helper to enable template only if feature is available.
Definition: traits.hpp:184

Macro for template specialization based on feature availability.

Parameters
featureLanguageFeature enum value (without namespace)

Definition at line 361 of file traits.hpp.

◆ TRLC_REQUIRE_NO_FEATURE

#define TRLC_REQUIRE_NO_FEATURE (   feature)
Value:
trlc::platform::LanguageFeature::feature>>
enable_if_t<!hasFeature< TFeature >()> enable_if_no_feature_t
SFINAE helper to enable template only if feature is NOT available.
Definition: traits.hpp:191

Macro for template specialization when feature is NOT available.

Parameters
featureLanguageFeature enum value (without namespace)

Definition at line 369 of file traits.hpp.