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: 29.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. ]

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 29.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 29.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 29.5.5.3 [rand.adapt.ibits]:
    const Engine& base() const noexcept;
    

    ? Returns: e.

  6. Change in 29.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 29.5.5.4 [rand.adapt.shuf]:
    const Engine& base() const noexcept;
    

    ? Returns: e.