#pragma once namespace floormat::detail_type_traits { namespace { template class IsComplete_ { // from template static char get(U*, decltype(sizeof(U))* = nullptr); static short get(...); public: enum: bool { value = sizeof(get(static_cast(nullptr))) == sizeof(char) }; }; } // namespace } // namespace floormat::detail_type_traits namespace floormat { template constexpr inline bool is_complete = bool(::floormat::detail_type_traits::IsComplete_::value); } // namespace floormat