Operator overloading giving encrypted error messages.

Charles McAnany mcanance at rose-hulman.edu
Tue Feb 8 14:58:30 PST 2011


Hi, all. I'm playing around with a BigRational struct to get more comfortable
with D.
The plan:
Allow binary operators so that a BR (BigRational) is the lhs and one of {BR,
BigInt, int, long} is the rhs.
So BR(5) + 2 compiles just as well as BR(5)+BR(2)
Here's the opBinary code I've worked out:
BigRational opBinary(string op,T)(T arg){
	BigRational y = BigRational(arg);
	static if(op == "+"){
		BigRational temp = this;
	}}} /// and so on, ending with an assert(0) after all the static ifs.

So, unit testing this with
auto br1 = BigRational(25,"2");
writefln("br1+1 = %s",br1+1);
works beautifully.


Now, I'd like to define the ++ to increase this by 1.
So, I write:
BigRational opUnary(string op)(){
	static if(op == "++"){
		this = this+1;
		return this;
//There are other overloads, too.
}}
Now, when I unittest
writefln("br1++ = %s", br1++); //This is line 166.
I get a weird error message:
C:\DProjects\BigRational\src>dmd BigRational.d -unittest
BigRational.d(166): Error: template BigRational.BigRational.opBinary(string op,T
) does not match any function template declaration
BigRational.d(166): Error: template BigRational.BigRational.opBinary(string op,T
) cannot deduce template function from argument types !()()

My issue here is that I have already used the exact same syntax in the first
unit test as my code for the ++ overload has, but here it fails me. (Plus, why
is line 166 having trouble with opBinary? ++ is unary, no?
Any ideas?
Thanks,
Charles.
begin 644 BigRational.d
M:6UP;W)T('-T9"YB:6=I;G0[#0II;7!O<G0@<W1D+G-T<FEN9SL-"FEM<&]R
M="!S=&0N<W1D:6\[#0II;7!O<G0@<W1D+FUA=&@[#0HO+T$@9&\M;F]T:&EN
M9R!M86EN+"!T;R!M86ME('1H92!C;VUP:6QE<B!H87!P>2X at 5&AE<F4@:7,@
M82!W87D@=&\@;6%K92!A(&1L;"!O<B!S;VUE=&AI;F<L(&)U="!))VQL('-T
M:6-K('=I=&@@86X at 97AE+B`-"B\O5&\@8V]M<&EL92!A;F0@<G5N('1E<W1S
M+"!D;60 at 0FEG4F%T:6]N86PN9"`M=6YI='1E<W0-"G9O:60@;6%I;B at I>PT*
M?0T*#0HO*BH-"D$@0FEG4F%T:6]N86PN(%!E<F9O<FUS(&%R8FET<F%R>2UP
M<F5C:7-I;VX at 87)I=&AM971I8R!O;B!N=6UB97)S(`T*=VET:"!N=6UE<F%T
M;W)S(&%N9"!D96YO;6EN871O<G,N(`T*075T:&]R.B!#:&%R;&5S($UC06YA
M;GDN#0HJ+PT*<W1R=6-T($)I9U)A=&EO;F%L>PT*<')I=F%T93H-"@E":6=)
M;G0@;G5M97)A=&]R.PT*"4)I9TEN="!D96YO;6EN871O<CL-"@D-"@DO+R]#
M86QC=6QA=&5S('1H92!G8V0@;V8@='=O($)I9TEN=',L('5S:6YG($5U8VQI
M9"=S(&%L9V]R:71H;2X-"@E":6=);G0 at 9V-D*$)I9TEN="!I;G0Q+"!":6=)
M;G0@:6YT,BE[#0H)"6EF("AI;G0R(#T](#`I#0H)"0ER971U<FX@:6YT,3L-
M"@D)<F5T=7)N(&=C9"AI;G0R+&EN=#$@)2!I;G0R*3L-"@E]#0H-"@DO+R]!
M<W-U;65S('1H870 at 8F]T:"!V86QU97, at 87)E('!O<VET:79E+ at T*"4)I9TEN
M="!L8VTH0FEG26YT(&EN=#$L($)I9TEN="!I;G0R*7L-"@D)<F5T=7)N(&EN
M=#$J:6YT,B]G8V0H:6YT,2QI;G0R*3L-"@E]#0H)#0H)=F]I9"!S:6UP;&EF
M>4UE*"E[#0H)"2\O1FER<W0L(&-H96-K(&9O<B!Z97)O<RX@#0H)"6EF("AD
M96YO;6EN871O<B`]/2`P*7L-"@D)"71H<F]W(&YE=R!%>&-E<'1I;VXH(D1I
M=FED92!B>2!Z97)O(BD[#0H)"7T-"@D):68H;G5M97)A=&]R(#T](#`I>PT*
M"0D);G5M97)A=&]R(#U":6=);G0H,"D[#0H)"0ED96YO;6EN871O<CT at 0FEG
M26YT*#$I.PT*"0E]"0T*"0DO+TEF('1H92!D96YO;6EN871O<B!I<R!N96=A
M=&EV92P at 9FQI<"!T:&4@;F5G871I=F4N(`T*"0EI9B`H9&5N;VUI;F%T;W(@
M/"`P*7L-"@D)"61E;F]M:6YA=&]R*CT at +3$[#0H)"0EN=6UE<F%T;W(J/2`M
M,3L)#0H)"7T-"@D)0FEG26YT(&-O;6UO;D9A8W1O<B`](&=C9"AN=6UE<F%T
M;W(L9&5N;VUI;F%T;W(I.PT*"0EN=6UE<F%T;W(@+ST at 8V]M;6]N1F%C=&]R
M.PT*"0ED96YO;6EN871O<B`O/2!C;VUM;VY&86-T;W([#0H)?0T*"0T*<'5B
M;&EC.B`-"@D-"@T*"71H:7,H5#$@/2!":6=2871I;VYA;"P at 5#(@/2!":6=2
M871I;VYA;"DH0FEG4F%T:6]N86P@;G5M+"!":6=2871I;VYA;"!D96XI>PT*
M"0EA=71O(')E<R`](&YU;2]D96X[#0H)"7-E=%5P4W1A=&4H<F5S+FYU;65R
M871O<BQR97,N9&5N;VUI;F%T;W(I.PT*"7T-"@D-"@D-"@ET:&ES*%0Q(#T@
M0FEG26YT+"!4,B`]($)I9TEN="DH0FEG26YT(&YU;2P at 0FEG26YT(&1E;BE[
M#0H)"7-E=%5P4W1A=&4H;G5M+&1E;BD[#0H)?0T*"0T*"71H:7,H5#$@/2!S
M=')I;F<L(%0R(#T@<W1R:6YG*2AS=')I;F<@;G5M+"!S=')I;F<@9&5N*7L-
M"@D)<V5T57!3=&%T92A":6=);G0H;G5M*2Q":6=);G0H9&5N*2D[#0H)?0T*
M"0T*"71H:7,H5#$](&QO;F<L(%0R/6QO;F<I*&QO;F<@;G5M+"!L;VYG(&1E
M;BE[#0H)"7-E=%5P4W1A=&4H0FEG26YT*&YU;2DL0FEG26YT*&1E;BDI.PT*
M"7T-"@D-"@EV;VED('-E=%5P4W1A=&4H0FEG26YT(&YU;2P at 0FEG26YT(&1E
M;BE[#0H)"71H:7,N;G5M97)A=&]R(#T@;G5M.PT*"0ET:&ES+F1E;F]M:6YA
M=&]R(#T at 9&5N.PT*"0ES:6UP;&EF>4UE*"D["0D-"@E]#0H)#0H)=&AI<RA4
M+$4I*%0@;G5M+"!%(&1E;BD-"@EI9B at A:7,H5"`]/2!%*2E[#0H)"6%U=&\@
M=&AE3G5M(#T at 0FEG4F%T:6]N86PH;G5M*3L-"@D)875T;R!T:&5$96X@/2!"
M:6=2871I;VYA;"AD96XI.PT*"0EA=71O(')E<R`]('1H94YU;2]T:&5$96X[
M#0H)"7-E=%5P4W1A=&4H<F5S+FYU;65R871O<BQR97,N9&5N;VUI;F%T;W(I
M.PT*"7T-"@D-"@ET:&ES*%0@/2!":6=2871I;VYA;"DH0FEG4F%T:6]N86P@
M<W1A<G0I>PT*"0ES9715<%-T871E*'-T87)T+FYU;65R871O<BP@<W1A<G0N
M9&5N;VUI;F%T;W(I.PT*"7T-"@D-"@D-"@ET:&ES*%0I*%0@;G5M*0T*"6EF
M*"%I<RA4(#T]($)I9U)A=&EO;F%L*2E[#0H)"4)I9TEN="!T:&5.=6T[#0H)
M"7-T871I8R!I9B`H(6ES*%0@/3T at 0FEG26YT*2E[#0H)"0ET:&5.=6T@/2!"
M:6=);G0H;G5M*3L-"@D)?65L<V5[#0H)"0ET:&5.=6T@/6YU;3L-"@D)?0T*
M"0ES9715<%-T871E*'1H94YU;2Q":6=);G0H,2DI.PT*"7T-"@D-"@DO+U-T
M<F5S<R!T:&4 at 8V]N<W1R=6-T;W)S+B`-"@EU;FET=&5S='L-"@D)0FEG4F%T
M:6]N86P at 8G(Q(#T at 0FEG4F%T:6]N86PH(C$R,S0B+"(R-2(I.PT*"0E":6=2
M871I;VYA;"!B<C(@/2!":6=2871I;VYA;"A":6=);G0H,C,T-2DI.PT*"0EA
M<W-E<G0H8G(R(#T](#(S-#4I.PT*"0E":6=2871I;VYA;"!B<C,@/2!":6=2
M871I;VYA;"@B,3(S-#4V-S at Y,#DX-S8U-#,R,3(S-#4V-S at Y.#<V-30S,C,T
M-38W.#<V-30S,C,T-38W.#<V-30S(BPB,C,T-38W-C4T,S(S-#4V-30S-#4V
M-30S,C,T-38W.#<V-30S(BD[#0H)"4)I9U)A=&EO;F%L(&)R-"`]($)I9U)A
M=&EO;F%L*&)R,2Q":6=);G0H,C`P,"DI.PT*"0E":6=2871I;VYA;"!B<C4@
M/2!":6=2871I;VYA;"AB<C$L8G(R*3L-"@D)875T;R!B<C8@/2!":6=2871I
M;VYA;"AB<C,L8G(S*3L-"@D)875T;R!B<C<@/2!":6=2871I;VYA;"@Q+#(P
M,"D[#0H)"7=R:71E9FQN*"(E<R(L8G(V*3L-"@D)=')Y>PT*"0D)0FEG4F%T
M:6]N86P at 9F%I;"`]($)I9U)A=&EO;F%L*#$L,"D[#0H)"0EA<W-E<G0H,"D[
M#0H)"7UC871C:"A%>&-E<'1I;VX at 92E[?0T*"7T-"@D-"@D)#0H)<W1R:6YG
M('1O4W1R:6YG*"E[#0H)"6EF*&YU;65R871O<B`]/2`P*0T*"0D)<F5T=7)N
M("(P(CL-"@D)8V]N<W0H8VAA<BE;72!N=6U#:&%R<SL-"@D);G5M97)A=&]R
M+G1O4W1R:6YG*"AC;VYS="AC:&%R*5M=(',I>VYU;4-H87)S('X](',[?2PB
M)7,B*3L)#0H)"6EF*&1E;F]M:6YA=&]R(#T](#$I#0H)"0ER971U<FX at 9F]R
M;6%T*"(E<R(L;G5M0VAA<G,I.PT*"0EC;VYS="AC:&%R*5M=(&1E;D-H87)S
M.PT*"0ED96YO;6EN871O<BYT;U-T<FEN9R at H8V]N<W0H8VAA<BE;72!S*7MD
M96Y#:&%R<R!^/2!S.WTL(B5S(BD[#0H)"7)E='5R;B!F;W)M870H(B5S+R5S
M(BQN=6U#:&%R<RQD96Y#:&%R<RD[(`T*"7T-"@T*"75N:71T97-T>PT*"6%U
M=&\@8G(Q(#T at 0FEG4F%T:6]N86PH(C$R,S0U-C<X.3 at W-C4T,S(S-#4V-S at W
M-C4T,S(Q,C,T-38W.#<V-30S,B(L(C$R,S0U-C<X-S8U-#,R,3(S-#4V-S<V
M-30S,C$R,S0U-C<V-30S,C$R,S0U-C<B*3L)#0H)=W)I=&5F;&XH(B5S(BQB
M<C$I.PT*"7=R:71E;&XH8G(Q+G1O4W1R:6YG*3L-"@EB<C$@+ST at 8G(Q+S([
M#0H)=W)I=&5F;&XH(B5S(BQB<C$I.PT*"7=R:71E;&XH8G(Q+G1O4W1R:6YG
M*3L-"@EB<C$@*CT@,#L-"@EW<FET969L;B at B)7,B+&)R,2D[#0H)=W)I=&5L
M;BAB<C$N=&]3=')I;F<I.PT*"7T-"@D-"@D-"@E":6=2871I;VYA;"!O<%5N
M87)Y*'-T<FEN9R!O<"DH*7L-"@D)<W1A=&EC(&EF("AO<"`]/2`B*R(I>PT*
M"0D)<F5T=7)N('1H:7,[#0H)"7T-"@D)<W1A=&EC(&EF*&]P(#T](BTB*7L-
M"@D)"7)E='5R;B!":6=2871I;VYA;"@M;G5M97)A=&]R+"!D96YO;6EN871O
M<BD[#0H)"7T-"@D)<W1A=&EC(&EF*&]P(#T]("(K*R(I>PT*"0D)=&AI<R`]
M('1H:7,K,3L-"@D)"7)E='5R;B!T:&ES.PT*"0E]#0H)"7-T871I8R!I9B`H
M;W`@/3T@(BTM(BE[#0H)"0EN=6UE<F%T;W(@+3T at 9&5N;VUI;F%T;W([#0H)
M"0ER971U<FX@=&AI<SL-"@D)?0T*"7T-"@D-"@EU;FET=&5S='L-"@EA=71O
M(&)R,2`]($)I9U)A=&EO;F%L*#(U+"(R(BD[#0H)=W)I=&5F;&XH(B5S(BQB
M<C$I"3L-"@EW<FET969L;B at B8G(Q*S$@/2`E<R(L8G(Q*S$I.PT*"7=R:71E
M9FQN*")B<C$K*R`]("5S(BP at 8G(Q*RLI.PT*"7=R:71E9FQN*")B<C$@/2`E
M<R(L8G(Q*3L-"@DO+W=R:71E9FQN*"(K*V)R,2`]("5S(BPK*V)R,2D["0T*
M"7T-"@D-"@D-"@DO+T]V97)L;V%D('1H92!B:6YA<GD@;W!E<F%T;W)S(%`L
M("TL("HL("\L(&%N9"!>7B`H17AP;VYE;G1I871I;VXI#0H)0FEG4F%T:6]N
M86P@;W!":6YA<GDH<W1R:6YG(&]P+%0I*%0 at 87)G*7L-"@D)0FEG4F%T:6]N
M86P@>2`]($)I9U)A=&EO;F%L*&%R9RD["0D-"@D)<W1A=&EC(&EF*&]P(#T]
M("(K(BE[#0H)"0E":6=2871I;VYA;"!T96UP(#T@=&AI<SL-"@D)"4)I9TEN
M="!L96%S=$-O;6UO;DUU;'1I<&QE(#T@;&-M*'1E;7`N9&5N;VUI;F%T;W(L
M('DN9&5N;VUI;F%T;W(I.PT*"0D)0FEG26YT('1H:7-&86-T;W(@/2!L96%S
M=$-O;6UO;DUU;'1I<&QE+W1E;7`N9&5N;VUI;F%T;W([#0H)"0E":6=);G0@
M=&AA=$9A8W1O<B`](&QE87-T0V]M;6]N375L=&EP;&4O>2YD96YO;6EN871O
M<CL-"@D)"71E;7`N;G5M97)A=&]R("H]('1H:7-&86-T;W([#0H)"0EY+FYU
M;65R871O<B`J/2!T:&%T1F%C=&]R.PT*"0D)0FEG26YT(&YE=TYU;65R871O
M<B`]('1E;7`N;G5M97)A=&]R("L@>2YN=6UE<F%T;W([#0H)"0ER971U<FX@
M0FEG4F%T:6]N86PH;F5W3G5M97)A=&]R+&QE87-T0V]M;6]N375L=&EP;&4I
M.R`-"@D)?0T*"0D-"@D)<W1A=&EC(&EF*&]P(#T]("(M(BD-"@D)"7)E='5R
M;B!T:&ES("L@*"UY*3L-"@D)#0H)"7-T871I8R!I9B`H;W`@/3T@(B\B*7L@
M#0H)"0D-"@D)"7)E='5R;B!T:&ES("IY+FEN=F5R<V4[#0H)"7T-"@D)#0H)
M"7-T871I8R!I9BAO<"`]/2`B*B(I>PT*"0D)0FEG26YT(&YE=TYU;2`]('1H
M:7,N;G5M97)A=&]R*GDN;G5M97)A=&]R.PT*"0D)0FEG26YT(&YE=T1E;B`]
M('1H:7,N9&5N;VUI;F%T;W(J>2YD96YO;6EN871O<CL-"@D)"7)E='5R;B!"
M:6=2871I;VYA;"AN97=.=6TL;F5W1&5N*3L-"@D)?0T*"0D-"@D)<W1A=&EC
M(&EF*&]P(#T](")>7B(I>PT*"0D)+R]4:&4@=6YD97)L>6EN9R!":6=);G0@
M;&EB<F%R>2!O;FQY(&1O97, at 97AP;VYE;G1I871I;VX@=VET:`T*"0D)+R\@
M;&]N9W,L(&YO="!O=&AE<B!":6=);G1S+B!!;'-O+"!I9B!D96YO;6EN871O
M<B!I<R!N;VXM;VYE+"`-"@D)"2\O(&%N(&ER<F%T:6]N86P@;6%Y(')E<W5L
M="X at 1F]R(&5X86UP;&4L("@R+S$I(%Y>("@Q+S(I(&ES(`T*"0D)+R\@:7)R
M871I;VYA;"X-"@D)"6EF("AY+F1E;F]M:6YA=&]R("$](#$@?'P@>2YN=6UE
M<F%T;W(@/B!L;VYG+FUA>"!\?"!Y+FYU;65R871O<B`\/2`M;&]N9RYM87 at I
M#0H)"0D)=&AR;W<@;F5W($5X8V5P=&EO;B at B0V%N;F]T('!E<F9O<FT at 97AP
M;VYE;G1I871I;VXN(BD[(`T*"0D)0FEG4F%T:6]N86P@=&5M<"`]('1H:7,[
M#0H)"0EI9B`H>2YN=6UE<F%T;W(@/CT@,"E[#0H)"0D)=&5M<"YN=6UE<F%T
M;W(@7EX]('DN;G5M97)A=&]R+G1O3&]N9SL-"@D)"0ET96UP+F1E;F]M:6YA
M=&]R(%Y>/2!Y+FYU;65R871O<BYT;TQO;F<[#0H)"0E]#0H)"0EI9B`H>2YN
M=6UE<F%T;W(@/#`I>PT*"0D)"71E;7`N;G5M97)A=&]R(#T@=&AI<RYD96YO
M;6EN871O<B!>7B!Y+FYU;65R871O<BYT;TQO;F<[#0H)"0D)=&5M<"YD96YO
M;6EN871O<B`]('1H:7,N;G5M97)A=&]R(%Y>('DN;G5M97)A=&]R+G1O3&]N
M9SL-"@D)"7T-"@D)"7)E='5R;B!T96UP.PT*"0E]"0T*"0EA<W-E<G0H,"D[
M("\O0V]U;&1N)W0 at 9FEN9"!Y;W5R(&]P97)A=&]R+"!S;R!T:&%T)W, at 82!P
M<F]B;&5M+B`-"@E]#0H-"@D-"B\O"4)I9U)A=&EO;F%L(&]P0FEN87)Y*'-T
M<FEN9R!O<"Q4*2A4('DI#0HO+PD):68@*"%I<R`H5"`]/2!":6=2871I;VYA
M;"DI>R`O+U1H92!B<F%C92!I<R!O;B!T:&ES(&QI;F4N(%1H92!I9B!H86YD
M;&5S(&1I<W!A=&-H+B`-"B\O"0D)+R]#;VUP:6QE+71I;64 at 8V]D92!G96YE
M<F%T:6]N+B!,:6ME("-D969I;F4@;6%C<F]S+"!B=70 at 8F5T=&5R(&EN(&5V
M97)Y('=A>2X-"B\O"0ER971U<FX@=&AI<RYO<$)I;F%R>2$H;W`L0FEG4F%T
M:6]N86PI*$)I9U)A=&EO;F%L*'DI*3L-"B\O"7T-"@T*"2\O5&AE(%1D=6UM
M>2!I<R!B96-A=7-E(&]P17%U86QS(&UU<W0@=&%K92!A(&-O;7!I;&4M=&EM
M92!T>7!E(&%R9W5M96YT+"`-"@DO+V5V96X@:68@:70@:7,@=6YU<V5D+B`-
M"@EB;V]L(&]P17%U86QS*%1D=6UM>2`]('9O:60I*$)I9U)A=&EO;F%L('DI
M>PT*"0EA=71O('1E;7`@/2!T:&ES+7D[#0H)"6EF("AT96UP+FYU;65R871O
M<B`]/2`P*0T*"0ER971U<FX@=')U93L-"@D)<F5T=7)N(&9A;'-E.PD)#0H)
M?0T*"0T*"2\O06QL;W=S('1E<W1I;F<@9F]R("AN=6UE<FEC*2!E<75A;&ET
M>2!O9B!T>7!E<R!T:&%T(&-A;B!B92`-"@DO+V-O;G9E<G1E9"!T;R!":6=2
M871I;VYA;',L('5S:6YG('1H92!C;VYS=')U8W1O<G,N(`T*"6)O;VP@;W!%
M<75A;',H5"DH5"!Y*0T*"6EF*"%I<RA4(#T]($)I9U)A=&EO;F%L*2E[#0H)
M"7)E='5R;B!T:&ES(#T]($)I9U)A=&EO;F%L*'DI.PD)#0H)?0T*"0T*"6EN
M="!O<$-M<"A":6=2871I;VYA;"!Y*7L-"@D)0FEG4F%T:6]N86P@<F5S(#T@
M=&AI<RUY.PD)#0H)"7)E='5R;B!R97,N<VEG;CL-"@E]#0H)#0H)0FEG4F%T
M:6]N86P@;W!/<$%S<VEG;BAS=')I;F<@;W`L(%0I*%0@>2E[#0H);6EX:6XH
M(G1H:7,@/2!T:&ES(B!^;W`@?B`B('D[(BD["0T*"7)E='5R;B!T:&ES.PT*
M"7T-"@D-"@EI;G0@<VEG;B at I>PT*"0EI9BAT:&ES+FYU;65R871O<B`^,"D-
M"@D)"7)E='5R;B`Q.PT*"0EI9BAT:&ES+FYU;65R871O<B`]/2`P*0T*"0D)
M<F5T=7)N(#`[#0H)"7)E='5R;B`M,3L-"@E]#0H)#0H)0FEG4F%T:6]N86P@
M86)S*"E[#0H)"7)E='5R;B!T:&ES*G1H:7,N<VEG;CL-"@E]#0H)#0H)0FEG
M4F%T:6]N86P@:6YV97)S92 at I>PT*"0ER971U<FX at 0FEG4F%T:6]N86PH=&AI
M<RYD96YO;6EN871O<BP@=&AI<RYN=6UE<F%T;W(I.PT*"7T-"@T*"4)I9TEN
M="!N*"E[#0H)"7)E='5R;B!T:&ES+FYU;65R871O<CL-"@E]#0H)0FEG26YT
M(`ED*"E[#0H)"7)E='5R;B!T:&ES+F1E;F]M:6YA=&]R.PT*"7T-"@D)#0I]
$#0H-"@``
`
end


More information about the Digitalmars-d-learn mailing list