
On 3/28/2012 3:42 PM, Eric Niebler wrote:
On 3/28/2012 2:58 PM, Michel Morin wrote:
Specifically, the change is about how decltype of a function call expression is determined. * N3242 says that in 7.1.6.2 p4: if e is a function call or an invocation of an overloaded operator (parentheses around e are ignored), decltype(e) is the return type of the statically chosen function;
* N3290 (FDIS) does not have such a wording. For a function call expression, decltype(e) is determined by the last rule in 7.1.6.2 p4: otherwise, decltype(e) is the type of e.
Right. I spoke with James Widman about this. He says the change was not because of the decltype v1.1 change, but rather about fixing core core issue 1212: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3368.html#1212
So, for "const int f();", * In N3242, decltype(f()) is const int; * In N3290, decltype(f()) is int.
Ah. *Now* I see what you're saying. <palmface> I think I agree with your analysis, but I'm going to check with somebody real quick. It's funny, I don't remember this change being discussed as part of the decltype 1.1 discussion. It was probably changed at the very last pre-FDIS committee meeting, which I didn't attend.
Stay tuned ...
James Widman also agrees with your analysis. I guess the result_of tests are wrong then. Could you file a bug? -- Eric Niebler BoostPro Computing http://www.boostpro.com