On 11/18/14 1:28 PM, Ali Çehreli wrote:
On 11/18/2014 07:32 AM, Wsdes wrote:
> Error: need 'this' for 'string' of type 'const(char*)'
Reduced:
struct S
{
union Value
{
const char* myString;
}
}
void main()
{
auto s = S();
auto mine = s.Value.myString; // ERROR
}
You may be thinking that Value introduces a name scope so that you can
reference its myString by Value.myString.
You have two options:
a) Remove Value so that it is an anonymous union. myString becomes a
direct member of S:
struct S
{
union // <-- Anonymous
{
const char* myString;
}
}
void main()
{
auto s = S();
auto mine = s.myString; // <-- No more Value
}
b) Make S have an actual member of type Value:
struct S
{
union Value
{
const char* myString;
}
Value value; // <-- Added
}
void main()
{
auto s = S();
auto mine = s.value.myString; // <-- Note lower initial
}
Ali
This works in C++:
struct S
{
union
{
const char *myString;
} Value;
};
But the issue is that D does not require the semicolon at the end of the
struct, so by the closing brace, it is done with the union.
the closest solution you can get is the last one you said.
I never even considered that you can't make an anonymous struct or union
type and assign it to a member in D. Not sure if we really need to
support it though.
-Steve