FreeBSD Manual Pages
std::is_scalar(3) C++ Standard Libary std::is_scalar(3) NAME std::is_scalar - std::is_scalar Synopsis Defined in header <type_traits> template< class T > (since C++11) struct is_scalar; If T is a scalar type, provides the member constant value equal true. For any other type, value is false. The behavior of a program that adds specializations for is_scalar or is_scalar_v (since C++17) is undefined. Template parameters T - a type to check Helper variable template template< class T > (since C++17) inline constexpr bool is_scalar_v = is_scalar<T>::value; Inherited from std::integral_constant Member constants value true if T is a scalar type , false otherwise [static] (public static member constant) Member functions operator bool converts the object to bool, returns value (public member function) operator() returns value (C++14) (public member function) Member types Type Definition value_type bool type std::integral_constant<bool, value> Notes Each individual memory location in the C++ memory model, including the hidden memory locations used by language features (e.g virtual table pointer), has scalar type (or is a sequence of adjacent bit-fields of non-zero length). Sequencing of side-effects in expression evaluation, interthread synchronization, and depen- dency ordering are all defined in terms of individual scalar objects. Possible implementation template<class T> struct is_scalar : std::integral_constant<bool, std::is_arithmetic<T>::value || std::is_enum<T>::value || std::is_pointer<T>::value || std::is_member_pointer<T>::value || std::is_null_pointer<T>::value> {}; Example // Run this code #include <iostream> #include <type_traits> #include <typeinfo> #include <utility> template<typename Head, typename... Tail> void are_scalars(Head&& head, Tail&&... tail) { using T = std::decay_t<decltype(head)>; std::cout << typeid(T).name() << " is " << (std::is_scalar_v<T> ? "" : "not ") << "a scalar\n"; if constexpr (sizeof... (Tail)) { are_scalars(std::forward<decltype(tail)>(tail)...); } } int main() { struct S { int m; } s; int S::* mp = &S::m; enum class E { e }; are_scalars(42, 3.14, E::e, "str", mp, nullptr, s); } Possible output: int is a scalar double is a scalar main::E is a scalar char const* is a scalar int main::S::* is a scalar nullptr is a scalar main::S is not a scalar See also is_arithmetic checks if a type is an arithmetic type (C++11) (class template) is_enum checks if a type is an enumeration type (C++11) (class template) is_pointer checks if a type is a pointer type (C++11) (class template) is_member_pointer checks if a type is a pointer to an non-static member function or (C++11) object (class template) http://cppreference.com 2022.07.31 std::is_scalar(3)
NAME | Synopsis | Template parameters | Member constants | Member functions | Member types | Notes | Possible implementation | Example | Possible output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::is_scalar&sektion=3&manpath=FreeBSD+Ports+15.0>
