39 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)    40   #error "Only <final/final.h> can be included directly."    45 #include "final/util/fstring.h"    59 enum class IsArray { No, Yes };
    60 enum class IsFunction { No, Yes };
    64         , IsArray is_array = std::is_array<T>::value
    67         , IsFunction is_function = std::is_function<T>::value
    85   using type = std::remove_extent_t<T>*;
    93   using type = std::add_pointer_t<T>;
   103 template <
typename T>
   107     using remove_ref = std::remove_reference_t<T>;
   111     using type = internal::cleanCondition_t<remove_ref>;
   115 template <
typename T>
   116 using clean_fdata_t = 
typename cleanFData<T>::type;
   119 template <
typename T>
   140     virtual auto getClassName() 
const -> 
FString   142       return "FDataAccess";
   146     constexpr 
auto get() -> clean_fdata_t<T>&
   154     constexpr 
void set (V&& data)
   156       static_cast<FData<T>&
>(*this).set(std::forward<V>(data));
   165 template <
typename T>
   169     using T_nocv = std::remove_cv_t<T>;
   172     explicit FData (T& v)  
   176     explicit FData (T&& v)  
   177       : value{std::move(v)}
   181     ~
FData() noexcept 
override = 
default;  
   185       , value_ref{d.isInitializedCopy() ? std::ref(value) : d.value_ref}
   189       : value{std::move(d.value)}
   190       , value_ref{d.isInitializedCopy() ? std::ref(value) : std::move(d.value_ref)}
   200         if ( d.isInitializedCopy() )
   203           value_ref = d.value_ref;
   209     auto operator = (
FData&& d) noexcept -> 
FData&  
   213         value = std::move(d.value);
   215         if ( d.isInitializedCopy() )
   218           value_ref = std::move(d.value_ref);
   224     constexpr 
auto operator () () 
const -> T
   229     constexpr 
explicit operator T ()
 const   234     constexpr 
auto operator << (
const T& v) -> 
FData&
   241     auto getClassName() 
const -> 
FString override   246     constexpr 
auto get() 
const -> T&
   252     constexpr 
void set (
const T& v)
   258     constexpr 
auto isInitializedCopy() 
const -> 
bool   260       const auto* v = 
reinterpret_cast<void*
>(
const_cast<T_nocv*
>(&value));
   261       const auto* r = 
reinterpret_cast<void*
>(
const_cast<T_nocv*
>(&value_ref.get()));
   265     constexpr 
auto isInitializedReference() 
const -> 
bool   267       return ! isInitializedCopy();
   271     constexpr 
friend auto operator << (std::ostream &os, 
const FData& data) -> std::ostream&
   273       os << data.value_ref.get();
   280     std::reference_wrapper<T> value_ref;
 
Definition: class_template.cpp:25