Spec-Zone.ru › C++

std::meta::is_assignment, std::meta::is_copy_assignment, std::meta::is_move_assignment

Defined in header <meta>
consteval bool is_assignment( std::meta::info r );
(1) (since C++26)
consteval bool is_copy_assignment( std::meta::info r );
(2) (since C++26)
consteval bool is_move_assignment( std::meta::info r );
(3) (since C++26)

Returns true if r represents:

1) an assignment operator,
2) a copy assignment operator,
3) a move assignment operator.

Otherwise returns false.

Parameters

r - a reflection value

Return value

true if r represents an assignment operator, otherwise false

Example

#include <iostream>
#include <meta>

template <typename C>
    requires(std::meta::is_class_type(^^C))
constexpr void print_assignment_operators()
{
    constexpr static auto class_name =
        std::define_static_string(std::meta::display_string_of(^^C));
    std::cout << "class " << class_name << '\n';

    constexpr auto ctx = std::meta::access_context::unchecked();
    constexpr static auto members =
        std::define_static_array(std::meta::members_of(^^C, ctx));
    template for (constexpr auto member : members)
    {
        if constexpr (std::meta::is_assignment(member))
        {
            std::cout << "  " << std::meta::display_string_of(member) << " is ";
            if constexpr (std::meta::is_copy_assignment(member))
                std::cout << "copy ";
            else if constexpr (std::meta::is_move_assignment(member))
                std::cout << "move ";
            std::cout << "assignment operator\n";
        }
    }
}

class C
{
    C& operator=(const C&);
    C& operator=(C&&) = default;
    C& operator+=(int);
};

int main()
{
    print_assignment_operators<C>();
}

Possible output:

class C
  C& C::operator=(const C&) is copy assignment operator
  constexpr C& C::operator=(C&&) is move assignment operator

See also

is_special_member_function
(C++26)
checks if reflection represents a special member function
(function)
is_operator_function
(C++26)
checks if reflection represents an operator overload
(function)
is_assignable_typeis_trivially_assignable_typeis_nothrow_assignable_type
(C++26)(C++26)(C++26)
checks if reflected type has an assignment operator for a specific argument
(function)
is_copy_assignable_typeis_trivially_copy_assignable_typeis_nothrow_copy_assignable_type
(C++26)(C++26)(C++26)
checks if reflected type has a copy assignment operator
(function)
is_move_assignable_typeis_trivially_move_assignable_typeis_nothrow_move_assignable_type
(C++26)(C++26)(C++26)
checks if reflected type has a move assignment operator
(function)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/is_assignment

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API