This is merely a syntactic difference in how structs are handled.
In D, structs are more akin to low level types like int and have
most of the same symantics.
So
SnonParameterized cnp(5, 3.303);
makes about as much sense as
int cnp(3);
You have two syntax choices to pick from in the D version of the
code you posted:
struct SnonParameterized
{
int t;
float u;
};
void main() {
auto snon1 = SnonParameterized(3, 4.5); // Option 1
SnonParameterized snon2 = {3, 4.5}; // Option 2
}
- Vijay
On Saturday, 10 November 2012 at 17:41:00 UTC, Too Embarrassed To
Say wrote:
I appreciate all the helpful replies, but I've simplified
things to what I belive is the core issue. In C++ (at the risk
of becoming a heretic) the language allows me to do the
following:
struct SnonParameterized
{
public:
int t;
float u;
SnonParameterized(int tparam, float uparam);
};
SnonParameterized::SnonParameterized(int tparam, float uparam)
{
t = tparam;
u = uparam;
}
SnonParameterized snp(5, 3.303); // this compiles with Visual
C++ 2010
===============================================================================
Now with D, I try (what I think is identical semantics) the
following:
struct SnonParameterized
{
int t;
float u;
this(int t, float u)
{
this.t = t
this.u = u;
}
}
SnonParameterized cnp(5, 3.303); // fails compile with Error:
found 'cnp' when expecting ';' following statement
auto hi = SnonParameterized(5, 3.303); // compiles of course.
I'm just trying to understand why D disallows the
non-assignment syntax. Probably for a very good (and obvious)
reason.