Created on 2013-06-06.00:00:00 last changed 126 months ago
Example:
#include <string> using namespace std; int main() { const string{ "Hello" }; // 1: error "xyzzy" + const string{"Hello"}; // 2: error typedef const string const_string; const_string{"Hello"}; // 3: ok "xyzzy" + const_string{"Hello"}; // 4: ok unsigned long{0}; // 5: error 42ul + unsigned long{0}; // 6: error typedef unsigned long unsigned_long; unsigned_long{0}; // 7: ok 42ul + unsigned_long{0}; // 8: ok }Sutter says:
The issue is "lines 1 to 8 below should all work." That they don't is just because of the reason Nikolay pointed out using line 1 below as an example:
> The error is purely syntactic: 'const string' is not a simple-type-specifier
Richard Smith points out the following:
I can't comment on what was noticed in the abstract, but I was certainly aware of all the above cases. And the rules make sense to me: function-style casts are supposed to be function-style, and the above error cases doesn't look like a function call (and not just because you've put the paren next to the type in the function-call-like cases, and added an extra space in the other cases!).
I'm not sure exactly what rules you're proposing, but I hope we don't make this valid:
struct A { int n; }; // ok, struct definition struct A { 0 }; // might now be an expression?
Regarding using a parenthesized type as a work-around, Sutter explained:
I think it needs to be an open EWG issue after all, because as Johannes pointed out the workaround doesn't work because it can't call multi-argument constructors, such as that
(const vector<int>)( 1, 2 )drops the 1 on the floor and creates a vector containing two zeroes. And that it doesn't work for list initializations, such as that
(unsigned int){ 1, 2, 3, 4 } // C compound literal(?!)doesn't work.
Deemed post-C++14 material in Chicago 2013. A paper is needed.
Discussed in Rapperswil 2014. The consensus of EWG is that this is not a promising direction. The workaround is to add a typedef. Closing the issue as NAD.
History | |||
---|---|---|---|
Date | User | Action | Args |
2014-07-01 21:57:43 | admin | set | status: open -> nad |
2013-06-06 00:00:00 | admin | create |