2017-03-12 1:04 GMT+01:00 Daniel Krügler <daniel.krueg...@gmail.com>: > 2017-03-11 23:14 GMT+01:00 Daniel Krügler <daniel.krueg...@gmail.com>: >> 2017-03-11 23:09 GMT+01:00 Tim Song <t.canens....@gmail.com>: >>> On Sat, Mar 11, 2017 at 3:37 PM, Daniel Krügler >>> <daniel.krueg...@gmail.com> wrote: >>>> 2017-03-11 21:23 GMT+01:00 Tim Song <t.canens....@gmail.com>: >>>>> On Sat, Mar 11, 2017 at 1:32 PM, Daniel Krügler >>>>> <daniel.krueg...@gmail.com> wrote: >>>>>> This patch applies inline to all namespace scope const variables >>>>>> according to options A and B2 voted in during the Kona meeting, see: >>>>>> >>>>>> http://wiki.edg.com/pub/Wg21kona2017/StrawPolls/p0607r0.html >>>>>> >>>>>> During that work it has been found that std::ignore was not declared >>>>>> constexpr (http://cplusplus.github.io/LWG/lwg-defects.html#2773), >>>>>> which was fixed as well. >>>>> >>>>> Just adding constexpr to std::ignore does ~nothing. The assignment >>>>> operator needs to be made constexpr too; there is really no other >>>>> reason to use std::ignore. >>>> >>>> There is nothing in the resolution of the issue (Nor in the discussion >>>> that argues for the change) that says so. Yes, I considered to make >>>> the assignment function template constexpr, but decided against it, >>>> because the wording of the issue doesn't have this requirement). I'm >>>> also aware of a test-case which would show the difference, but again: >>>> This was not what the issue said. In fact I'm in the process to open a >>>> new library issue that should impose that additional requirement. >>>> >>>> - Daniel >>> >>> Well, technically speaking, the issue resolution doesn't even >>> guarantee that the use case mentioned in the issue would compile since >>> the standard says nothing about whether the copy constructor of >>> decltype(std::ignore) is constexpr, or even whether it can be copied >>> at all. Yes, std::ignore is underspecified, but I'm not sure I see the >>> point in waiting; it's a completely conforming change and IMHO the >>> issue's intent is clearly to make std::ignore fully usable in >>> constexpr functions. >>> >>> Also, the only specification we have for std::ignore's semantics is >>> "when an argument in t is ignore, assigning any value to the >>> corresponding tuple element has no effect". I think one can argue that >>> "causes an expression to be non-constant" is an "effect". >>> >>> Re "new library issue", we already have issue 2933. >> >> Good point, it already exists ;-) > > Revised patch attached.
I would just like to point out that I'm on vacation from Friday on for two weeks, so if any changes to this patch are requested, I will work on them after my return. Thanks, - Daniel