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.


Reply via email to