Patch for LWG issue #2145
mclow.lists at gmail.com
Tue Aug 20 20:31:08 PDT 2013
On Aug 20, 2013, at 8:12 PM, David Blaikie <dblaikie at gmail.com> wrote:
> On Tue, Aug 20, 2013 at 11:11 AM, Marshall Clow <mclow.lists at gmail.com> wrote:
>> Mark the constructor for std::error_category as inline and constexpr.
>> Leave the (existing, out-of-line, non-constexpr) in the dylib for compatibility with existing programs)
>> No tests, because I don't know how to test it (given that error_category is both an abstract class and has a user-defined destructor)
> Curious - I haven't dealt with constexpr much, but could you explain
> further why this is untestable yet is a useful/meaningful change to
I'll be happy to try.
In LWG Issue #2145, the C++ standard was changed to mark the constructor for std::error_category as "constexpr"
The change was done to match the current C++ standard. That's why it is useful/meaningful/desirable.
As for it being untestable - std::error_category is an abstract base class, which means it can't be instantiated, and it has a non-default virtual destructor, which means that classed that derived from it can't be constexpr.
If you read the LWG issue, there is a desire for static global variables (including thread-local statics) to be able to be initialized at compile time.
However, I don't see any good way to test that - (say) thread local statics being initialized at compile time; and even if I could test it, a failing test doesn't mean that libc++ is wrong - it might just mean that clang has decided not to construct the variable at compile time.
Marshall Clow Idio Software <mailto:mclow.lists at gmail.com>
A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait).
-- Yu Suzuki
More information about the cfe-commits