A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../error/../language/../types/is_scalar.html below:

std::is_scalar - cppreference.com

template< class T >
struct is_scalar;

(since C++11)

std::is_scalar is a UnaryTypeTrait.

If T is a scalar type, provides the member constant value equal true. For any other type, value is false.

If the program adds specializations for std::is_scalar or std::is_scalar_v, the behavior is undefined.

[edit] Template parameters [edit] Helper variable template

template< class T >
constexpr bool is_scalar_v = is_scalar<T>::value;

(since C++17) Inherited from std::integral_constant Member constants true if T is a scalar type, false otherwise
(public static member constant) Member functions converts the object to bool, returns value
(public member function) returns value
(public member function) Member types [edit] 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, inter-thread synchronization, and dependency ordering are all defined in terms of individual scalar objects.

[edit] Possible implementation [edit] Example
#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
[edit] See also checks if a type is an arithmetic type
(class template) [edit] checks if a type is an enumeration type
(class template) [edit] checks if a type is a pointer type
(class template) [edit] checks if a type is a pointer to a non-static member function or object
(class template) [edit]

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4