On Friday, 3 October 2014 at 15:47:33 UTC, John Colvin wrote:
On Friday, 3 October 2014 at 15:44:16 UTC, eles wrote:
class ShapeSurface(T) {
public:
int formula();
that means you have a definition of formula elsewhere (which
the linker tries to find, but obviously fails. What you want is
class ShapeSurface(T) {
public:
abstract int formula();
Thanks, but still. The compiler shall not let that code pass down
to the linker. It has everything it needs to not do that, or it
shall have. Linker errors shall be simply because the libraries
are not in place (either not installed, either linking path not
correctly configured, either broken versions of those libraries).
Then, a quirk of D:
this passes and works correctly:
surface = cast(T *)this.formula();
this segfaults the produced binary:
surface = (cast(T *)this).formula();
this fails:
surface = cast(T)this.formula();
with
app.d(8): Error: cannot cast this.formula() of type int to
app.Square
while one has to throw in parentheses to make it work (correctly)
once again:
surface = (cast(T)this).formula();
Isn't this funny, that you have to throw in parentheses depending
on the type of the type you cast to?