GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::is_layout_compatible(3) C++ Standard Libary std::is_layout_compatible(3)

std::is_layout_compatible - std::is_layout_compatible


Defined in header <type_traits>
template< class T, class U > (since C++20)
struct is_layout_compatible;


If T and U are layout-compatible types, provides the member constant value equal to
true. Otherwise value is false.


Every type is layout-compatible with its any cv-qualified versions, even if it is
not an object type.


T and U shall each be a complete type, (possibly cv-qualified) void, or an array of
unknown 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.


The behavior of a program that adds specializations for is_layout_compatible or
is_layout_compatible_v is undefined.


Helper variable template


template< class T, class U >
inline constexpr bool is_layout_compatible_v = (since C++20)
is_layout_compatible<T, U>::value;

Inherited from std::integral_constant


value true if T and U are layout-compatible, false otherwise
[static] (public static member constant)


operator bool converts the object to bool, returns value
(public member function)
operator() returns value
(C++14) (public member function)


Type Definition
value_type bool
type std::integral_constant<bool, value>


A signed integer type and its unsigned counterpart are not layout-compatible. char
is layout-compatible with neither signed char nor unsigned char.


Similar types are not layout-compatible if they are not the same type after ignoring
top-level cv-qualification.


An enumeration type and its underlying type are not layout-compatible.


Array types of layout-compatible but different element types (ignoring
cv-qualification) are not layout-compatible, even if they are of equal length.


Feature-test macro: __cpp_lib_is_layout_compatible

// Run this code


#include <type_traits>
#include <iomanip>
#include <iostream>


struct Foo {
int x;
char y;
};


class Bar {
const int u = 42;
volatile char v = '*';
};


enum E0 : int {};
enum class E1 : int {};


#define SHOW(...) std::cout << std::setw(54) << #__VA_ARGS__ << " = " << __VA_ARGS__ << '\n'


int main()
{
std::cout << std::boolalpha << std::left;
SHOW(std::is_layout_compatible_v<const void, volatile void>);
SHOW(std::is_layout_compatible_v<Foo, Bar>);
SHOW(std::is_layout_compatible_v<Foo[2], Bar[2]>);
SHOW(std::is_layout_compatible_v<int, E0>);
SHOW(std::is_layout_compatible_v<E0, E1>);
SHOW(std::is_layout_compatible_v<long, unsigned long>);
SHOW(std::is_layout_compatible_v<char*, const char*>);
SHOW(std::is_layout_compatible_v<char*, char* const>);
}


std::is_layout_compatible_v<const void, volatile void> = true
std::is_layout_compatible_v<Foo, Bar> = true
std::is_layout_compatible_v<Foo[2], Bar[2]> = false
std::is_layout_compatible_v<int, E0> = false
std::is_layout_compatible_v<E0, E1> = true
std::is_layout_compatible_v<long, unsigned long> = false
std::is_layout_compatible_v<char*, const char*> = false
std::is_layout_compatible_v<char*, char* const> = true


is_standard_layout checks if a type is a standard-layout type
(C++11) (class template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.