This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++14 status.
noexcept specification in type_indexSection: 17.7.7 [type.index] Status: C++14 Submitter: Daniel Krügler Opened: 2012-03-18 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [type.index].
View all issues with C++14 status.
Discussion:
The class type type_index is a thin wrapper of type_info to
adapt it as a valid associative container element. Similar to type_info,
all member functions have an effective noexcept(true) specification, with the
exception of hash_code() and name(). The actual effects of these
functions is a direct call to type_info's hash_code() and name
function, but according to 17.7 [support.rtti] these are both noexcept
functions, so there is no reason for not declaring them as noexcept, too. In fact,
one of the suggested changes of the original proposing paper
N2530
specifically was to ensure that type_info would get a hash_code()
function that guarantees not to throw exceptions (during that time the hash
requirements did not allow to exit with an exception). From this we can conclude that
type_index::hash_code() was intended to be nothrow.
noexcept.
[2013-03-15 Issues Teleconference]
Moved to Tentatively Ready.
[2013-04-20 Bristol]
Proposed resolution:
This wording is relative to N3376.
Modify the class type_index synopsis, [type.index.overview] as indicated:
namespace std {
class type_index {
public:
type_index(const type_info& rhs) noexcept;
bool operator==(const type_index& rhs) const noexcept;
bool operator!=(const type_index& rhs) const noexcept;
bool operator< (const type_index& rhs) const noexcept;
bool operator<= (const type_index& rhs) const noexcept;
bool operator> (const type_index& rhs) const noexcept;
bool operator>= (const type_index& rhs) const noexcept;
size_t hash_code() const noexcept;
const char* name() const noexcept;
private:
const type_info* target; // exposition only
// Note that the use of a pointer here, rather than a reference,
// means that the default copy/move constructor and assignment
// operators will be provided and work as expected.
};
}
Modify the prototype definitions in [type.index.members] as indicated:
size_t hash_code() const noexcept;-8- Returns:
target->hash_code()const char* name() const noexcept;-9- Returns:
target->name()