C++ Logo

sg10

Advanced search

Re: [SG10] Missing feature-test macros since 2017

From: Barry Revzin <barry.revzin_at_[hidden]>
Date: Mon, 9 Sep 2019 21:58:32 -0500
On Mon, Sep 9, 2019 at 9:37 PM Richard Smith <richard_at_[hidden]> wrote:

> Good point. Determining whether you can mark functions as constexpr seems
> like a reasonable motivation for at least try/catch and changing the active
> union member. Probably also for virtual function calls. How many feature
> test macros do we want? (Clang already implemented all of these, so we'll
> start advertising them all in the same release and don't need separate
> macros; I don't know about other implementations.)
>

This is good question to answer. In the nodiscard conversation, Wakely
suggested having a specific nodiscard_reason macro even if we are already
bumping the nodiscard value (
http://www.open-std.org/pipermail/features/2019-August/000628.html),
because it's more convenient for users.

In this case, would having granular macros help? I guess we'd write:

#if __cpp_constexpr_union_assign
constexpr
#endif
optional& operator=(nullopt_t) noexcept;

and is going to be more user friendly than

#if __cpp_constexpr > whatwasthatnumberagain
constexpr
#endif

and both probably easier to understand than

#if __cpp_constexpr > whatever
#define CONSTEXPR_UNION_TRY_POLY constexpr
#else
#define CONSTEXPR_UNION_TRY_POLY
#endif

CONSTEXPR_UNION_TRY_POLY optional& operator=(nullopt_t) noexcept;

although there's probably some clever preprocessor way of writing

CONSTEXPR(thatvalue) optional& operator=(nullopt_t) noexcept;

which wouldn't be so bad?

Barry

Received on 2019-09-10 04:58:45