std::indirect<T, Allocator>:: indirect
| 
           
           
           
           
            
             constexpr
            
            
             explicit
            
            indirect
            
             (
            
            
             )
            
            
             ;
            
           
           
          | 
         (1) | (since C++26) | 
| 
           
           
           
           
            
             constexpr
            
            
             explicit
            
            indirect
            
             (
            
            
             
              std::
              
               allocator_arg_t
              
             
            
            ,
            
             const
            
            Allocator
            
             &
            
            a
            
             )
            
            
             ;
            
           
           
          | 
         (2) | (since C++26) | 
| 
           
           
           
           
            
             template
            
            
             <
            
            
             class
            
            U
            
             =
            
            T
            
             >
            
             
         constexpr explicit indirect ( U && v ) ;  | 
         (3) | (since C++26) | 
| 
           
           
           
           
            
             template
            
            
             <
            
            
             class
            
            U
            
             =
            
            T
            
             >
            
             
         
             
              constexpr
             
             
              explicit
             
             indirect
             
              (
             
             
              
               std::
               
                allocator_arg_t
               
              
             
             ,
             
              const
             
             Allocator
             
              &
             
             a,
               | 
         (4) | (since C++26) | 
| 
           
           
           
           
            
             template
            
            
             <
            
            
             class
            
            ...
            
             Args
            
            
             >
            
             
         constexpr explicit indirect ( std:: in_place_t , Args && ... args ) ;  | 
         (5) | (since C++26) | 
| 
           
           
           
           
            
             template
            
            
             <
            
            
             class
            
            ...
            
             Args
            
            
             >
            
             
         
             
              constexpr
             
             
              explicit
             
             indirect
             
              (
             
             
              
               std::
               
                allocator_arg_t
               
              
             
             ,
             
              const
             
             Allocator
             
              &
             
             a,
               | 
         (6) | (since C++26) | 
| 
           
           
           
           
            
             template
            
            
             <
            
            
             class
            
            I,
            
             class
            
            ...
            
             Args
            
            
             >
            
             
         
             
              constexpr
             
             
              explicit
             
             indirect
             
              (
             
             
              
               std::
               
                in_place_t
               
              
             
             ,
             
              
               std::
               
                initializer_list
               
              
             
             
              <
             
             I
             
              >
             
             ilist,
               | 
         (7) | (since C++26) | 
| 
           
           
           
           
            
             template
            
            
             <
            
            
             class
            
            I,
            
             class
            
            ...
            
             Args
            
            
             >
            
             
         
             
              constexpr
             
             
              explicit
             
             indirect
             
              (
             
             
              
               std::
               
                allocator_arg_t
               
              
             
             ,
             
              const
             
             Allocator
             
              &
             
             a,
               | 
         (8) | (since C++26) | 
| 
           
           
           
           
            
             constexpr
            
            indirect
            
             (
            
            
             const
            
            indirect
            
             &
            
            other
            
             )
            
            
             ;
            
           
           
          | 
         (9) | (since C++26) | 
| 
           
           
           
           
            
             constexpr
            
            indirect
            
             (
            
            
             
              std::
              
               allocator_arg_t
              
             
            
            ,
            
             const
            
            Allocator
            
             &
            
            a,
             
         const indirect & other ) ;  | 
         (10) | (since C++26) | 
| 
           
           
           
           
            
             constexpr
            
            indirect
            
             (
            
            indirect
            
             &&
            
            other
            
             )
            
            
             noexcept
            
            
             ;
            
           
           
          | 
         (11) | (since C++26) | 
| 
           
           
           
           
            
             constexpr
            
            indirect
            
             (
            
            
             
              std::
              
               allocator_arg_t
              
             
            
            ,
            
             const
            
            Allocator
            
             &
            
            a,
             
         indirect && other ) noexcept ( /* see below */ ) ;  | 
         (12) | (since C++26) | 
       Constructs a new
       
        indirect
       
       object.
      
         Contents | 
       
Parameters
| a | - | the allocator to be associated | 
| v | - | value with which to initialize the owned value | 
| args | - | arguments with which to initialize the owned value | 
| il | - | initializer list with which to initialize the owned value | 
| other | - | 
         another
         
          indirect
         
         object whose owned value (if exists) is copied
         | 
       
Effects
       The construction of a new
       
        indirect
       
       object consists of the following steps:
      
        
         
          alloc
         
        
       
       :
       - 
         If the initializer for
         
allocis empty, it is value-initialized . - 
         If the initializer for
         
allocis not empty, it is direct-non-list-initialized with the initializer argument. 
- 
         For overloads
         
          (
          
           1-8
          
          )
         
         , initialize
         
pwith the result of calling std:: allocator_traits < Allocator > :: allocate , then calls std:: allocator_traits < Allocator > :: construct (alloc ,p , args... ) , where args... is an expression pack containing the initializer arguments. - 
         For overloads
         
          (
          
           9-12
          
          )
         
         :
         
- If other is valueless, no owned object is constructed, and * this is also valueless after construction.
 - 
           Otherwise, if
           
            
             other
            
           
           is an rvalue reference and
           
allocequals other.alloc, * this takes ownership of the owned object of other . - 
           Otherwise, the owned object is constructed using
           
allocas described above. 
 
| Overload | Initializer for... | 
         
          
           valueless_after_move()
          
         
         after construction  | 
       |
|---|---|---|---|
         
          
           
            
             alloc
            
           
          
         
         | 
        the owned object | ||
| ( 1 ) | (empty) | (empty) | false | 
| ( 2 ) | a | ||
| ( 3 ) | (empty) | std:: forward < U > ( v ) | |
| ( 4 ) | a | ||
| ( 5 ) | (empty) | std:: forward < Args > ( args ) | |
| ( 6 ) | a | ||
| ( 7 ) | (empty) | ilist, std:: forward < Args > ( args ) | |
| ( 8 ) | a | ||
| ( 9 ) | see below | 
         
          
           
            *
           
           other
          
         
          (only if other owns a value)  | 
        true only if other is valueless | 
| ( 10 ) | a | ||
| ( 11 ) | 
         
          
           std
           
            ::
           
           
            move
           
           
            (
           
           other.
          
          
           
            
             alloc
            
           
          
          
          
           
            )
           
          
         
         | 
        
         takes ownership
          (only if other owns a value)  | 
       |
| ( 12 ) | a | see below | |
        
         
          alloc
         
        
       
       is direct-non-list-initialized with
       
        
         
          
           std::
           
            allocator_traits
           
          
         
         
          <
         
         Allocator
         
          >
         
         
          ::
         
        
        
        
        
         select_on_container_copy_construction
         
          (
         
         other.
        
        
         
          
           alloc
          
         
        
        
        
         
          )
         
        
       
       .
      Constraints and supplement information
        U
       
      
        Args...
       
      
- std:: is_same_v < std:: remove_cvref_t < U > , std :: indirect >
 - std:: is_same_v < std:: remove_cvref_t < U > , std:: in_place_t >
 
        T
       
       is an
       
        incomplete type
       
       , the program is ill-formed.
      Exceptions
Throws nothing unless std:: allocator_traits < Allocator > :: allocate or std:: allocator_traits < Allocator > :: construct throws.
Example
| 
         This section is incomplete
          Reason: no example  | 
       
See also
| 
          
           
            
             
              (C++11)
             
            
           
           
          | 
        
         tag type used to select allocator-aware constructor overloads
          (class)  | 
       
| 
         in-place construction tag
          (tag)  |