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/../algorithm/../ranges/../types/is_constructible.html below:

std::is_constructible, std::is_trivially_constructible, std::is_nothrow_constructible - cppreference.com

template< class T, class... Args >
struct is_constructible;

(1) (since C++11)

template< class T, class... Args >
struct is_trivially_constructible;

(2) (since C++11)

template< class T, class... Args >
struct is_nothrow_constructible;

(3) (since C++11) 1)

If

T

is an object or reference type and the variable definition

T obj(std::declval<Args>()...);

is well-formed, provides the member constant

value

equal to

true

. In all other cases,

value

is

false

.

For the purposes of this check, the variable definition is never interpreted as a function declaration, and the use of

std::declval

is not considered an

odr-use

.

Access checks

are performed as if from a context unrelated to

T

and any of the types in

Args

. Only the validity of the immediate context of the variable definition is considered.

2)

Same as

(1)

, but the variable definition does not call any operation that is not trivial. For the purposes of this check, the call to

std::declval

is considered trivial.

3) Same as (1), but the variable definition is noexcept.

If T or any type in the parameter pack Args is not a complete type, (possibly cv-qualified) void, or an array of unknown bound, 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.

If the program adds specializations for any of the templates described on this page, the behavior is undefined.

[edit] Helper variable templates template< class T, class... Args >

inline constexpr bool is_constructible_v =

    is_constructible<T, Args...>::value;
(since C++17) template< class T, class... Args >

inline constexpr bool is_trivially_constructible_v =

    is_trivially_constructible<T, Args...>::value;
(since C++17) template< class T, class... Args >

inline constexpr bool is_nothrow_constructible_v =

    is_nothrow_constructible<T, Args...>::value;
(since C++17) Inherited from std::integral_constant Member constants true if T is constructible from Args..., 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

In many implementations, is_nothrow_constructible also checks if the destructor throws because it is effectively noexcept(T(arg)). Same applies to is_trivially_constructible, which, in these implementations, also requires that the destructor is trivial: GCC bug 51452 LWG issue 2116.

[edit] Example
#include <iostream>
#include <type_traits>
 
class Foo
{
    int v1;
    double v2;
public:
    Foo(int n) : v1(n), v2() {}
    Foo(int n, double f) noexcept : v1(n), v2(f) {}
};
 
int main()
{
    auto is = [](bool o) { return (o ? "\t" "is " : "\t" "isn't "); };
    std::cout << "Foo ...\n"
              << is(std::is_trivially_constructible_v<Foo, const Foo&>)
              << "Trivially-constructible from const Foo&\n"
              << is(std::is_trivially_constructible_v<Foo, int>)
              << "Trivially-constructible from int\n"
              << is(std::is_constructible_v<Foo, int>)
              << "Constructible from int\n"
              << is(std::is_nothrow_constructible_v<Foo, int>)
              << "Nothrow-constructible from int\n"
              << is(std::is_nothrow_constructible_v<Foo, int, double>)
              << "Nothrow-constructible from int and double\n";
}

Output:

Foo ...
        is Trivially-constructible from const Foo&
        isn't Trivially-constructible from int
        is Constructible from int
        isn't Nothrow-constructible from int
        is Nothrow-constructible from int and double
[edit] See also

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