std::is_copy_assignable,std::is_trivially_copy_assignable, (3) Linux Manual Page
std::is_copy_assignable,std::is_trivially_copy_assignable, – std::is_copy_assignable,std::is_trivially_copy_assignable,
Synopsis
Defined in header<type_traits>
template <class T>
(1)(since C++ 11)
struct is_copy_assignable;
template <class T>
(2)(since C++ 11)
struct is_trivially_copy_assignable;
template <class T>
(3)(since C++ 11)
struct is_nothrow_copy_assignable;
1)
type with a cv-qualifier-seq or a ref-qualifier), provides a member constant value
equal to false. Otherwise, provides a member constant value equal to
std::is_assignable<T&, const T&>::value.
2)
3)
T shall be a complete type,
bound. Otherwise, the behavior is undefined.
If an instantiation of a template above depends, directly or indirectly, on an
incomplete type, and that instantiation could yield a different result if that type
were hypothetically completed, the behavior is undefined.
template< class T >
inline constexpr bool is_copy_assignable_v = (since C++17)
is_copy_assignable<T>::value;
template< class T >
inline constexpr bool is_trivially_copy_assignable_v = (since C++17)
is_trivially_copy_assignable<T>::value;
template< class T >
inline constexpr bool is_nothrow_copy_assignable_v = (since C++17)
is_nothrow_copy_assignable<T>::value;
Inherited from std::integral_constant
Member constants
value
[static]
Member functions
operator bool converts the object to bool, returns value
operator()
(C++14)
Member types
Type
value_type bool
type
Possible implementation
template< class T> struct is_copy_assignable
template< class T> struct is_trivially_copy_assignable
template< class T> struct is_nothrow_copy_assignable
Notes
The trait std::is_copy_assignable is less strict than CopyAssignable because it does
not check the type of the result of the assignment
type, must be an lvalue of type T)
the argument expression remains unchanged. It also does not check that T satisfies
MoveAssignable, which is required of all CopyAssignable types.
Example
// Run this code
#include <iostream>
#include <utility>
#include <type_traits>
struct Foo {
int n;
};
int main()
{
std::cout << std::boolalpha
<< "Foo is trivially copy-assignable? "
<< std::is_trivially_copy_assignable<Foo>::value << '\n'
<< "int[2] is copy-assignable? "
<< std::is_copy_assignable<int[2]>::value << '\n'
<< "int is nothrow copy-assignable? "
<< std::is_nothrow_copy_assignable<int>::value << '\n';
}
Output:
See also
is_assignable
is_trivially_assignable
is_nothrow_assignable
(C++11)
(C++11)
(C++11)
is_move_assignable
is_trivially_move_assignable
is_nothrow_move_assignable
(C++11)
(C++11)
(C++11)
