This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.

### 1438. No definition for `base()`

Section: 28.5.5.2 [rand.adapt.disc] Status: C++11 Submitter: INCITS Opened: 2010-08-25 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [rand.adapt.disc].

View all issues with C++11 status.

Discussion:

Addresses US-126

Each adaptor has a member function called `base()` which has no definition.

[ Resolution proposed by ballot comment: ]

> Give it the obvious definition.

[ 2010-11-03 Daniel comments and provides a proposed resolution: ]

The following proposal adds `noexcept` specifiers to the declarations of the `base()` functions as replacement for a "Throws: Nothing" element.

[ 2010 Batavia: The working group reviewed this issue, and recommended to add the following to the Proposed Resolution. ]

- Append to paragraph 1 of [rand.req.adapt] (or at the Editor's discretion insert as a new paragraph following that paragraph): The expression `a.base()` shall be valid and shall return a const reference to `a`'s base engine.

After further review, the working group concurred with the Proposed Resolution.

[Batavia: waiting for WEB to review wording]

Proposed resolution:

1. Add the following sentence to the end of 28.5.3.5 [rand.req.adapt]/1:

   > A random number engine adaptor (commonly shortened to adaptor) `a` of type `A` is a random number engine that takes values produced by some other random number engine, and applies an algorithm to those values in order to deliver a sequence of values with different randomness properties. An engine `b` of type `B` adapted in this way is termed a base engine in this context. The expression `a.base()` shall be valid and shall return a const reference to `a`'s base engine.

2. Change in [rand.adapt.disc]/3, class template `discard_block_engine` synopsis, the following declaration:

   >     // property functions
   >     const Engine& base() const noexcept;

3. Add the following new prototype description at the end of sub-clause 28.5.5.2 [rand.adapt.disc]:

   >     const Engine& base() const noexcept;

   > > ? Returns: `e`.

4. Change in [rand.adapt.ibits]/4, class template `independent_bits_engine` synopsis, the following declaration:

   >     // property functions
   >     const Engine& base() const noexcept;

5. Add the following new prototype description at the end of sub-clause 28.5.5.3 [rand.adapt.ibits]:

   >     const Engine& base() const noexcept;

   > > ? Returns: `e`.

6. Change in 28.5.5.4 [rand.adapt.shuf]/3, class template `shuffle_order_engine` synopsis, the following declaration:

   >     // property functions
   >     const Engine& base() const noexcept;

7. Add the following new prototype description at the end of sub-clause 28.5.5.4 [rand.adapt.shuf]:

   >     const Engine& base() const noexcept;

   > > ? Returns: `e`.