digitalmars.D.learn - What's wrong in this templatized operator overload ?
- MobPassenger (19/19) Oct 21 2015 code:
- Mike Parker (6/12) Oct 21 2015 This needs to be marked with const:
- MobPassenger (3/17) Oct 21 2015 what's the rationale ? what's guaranteed by the qualifier that's
- Cauterite (5/24) Oct 21 2015 `const` just means the function won't mutate the object. `const`
- MobPassenger (6/33) Oct 22 2015 Thx for the explanations. By the way I knew that when const is
code: --- struct Foo { bool opIn_r(T)(T t){return false;} } static immutable Foo foo; // ouch //static Foo foo; // OK void main() { assert("a" !in foo); } --- output: --- Error: template Foo.opIn_r cannot deduce function from argument types !()(string) immutable, candidates are: runnable.Foo.opIn_r(T)(T t) ---
Oct 21 2015
On Thursday, 22 October 2015 at 03:19:49 UTC, MobPassenger wrote:code: --- struct Foo { bool opIn_r(T)(T t){return false;} }This needs to be marked with const: struct Foo { bool opIn_r(T)(T t) const {return false;} }
Oct 21 2015
On Thursday, 22 October 2015 at 04:01:16 UTC, Mike Parker wrote:On Thursday, 22 October 2015 at 03:19:49 UTC, MobPassenger wrote:what's the rationale ? what's guaranteed by the qualifier that's not already true without const ?code: --- struct Foo { bool opIn_r(T)(T t){return false;} }This needs to be marked with const: struct Foo { bool opIn_r(T)(T t) const {return false;} }
Oct 21 2015
On Thursday, 22 October 2015 at 04:25:01 UTC, MobPassenger wrote:On Thursday, 22 October 2015 at 04:01:16 UTC, Mike Parker wrote:`const` just means the function won't mutate the object. `const` functions can be safely called on mutable, const and immutable objects. Non-`const` functions can only be called on mutable objects.On Thursday, 22 October 2015 at 03:19:49 UTC, MobPassenger wrote:what's the rationale ? what's guaranteed by the qualifier that's not already true without const ?code: --- struct Foo { bool opIn_r(T)(T t){return false;} }This needs to be marked with const: struct Foo { bool opIn_r(T)(T t) const {return false;} }
Oct 21 2015
On Thursday, 22 October 2015 at 05:17:29 UTC, Cauterite wrote:On Thursday, 22 October 2015 at 04:25:01 UTC, MobPassenger wrote:Thx for the explanations. By the way I knew that when const is applied to the return type it has to be surrounded between parens but so far I've never encountered the other case...And now I also remember why this attribte should rather be put at the right of the function declaration.On Thursday, 22 October 2015 at 04:01:16 UTC, Mike Parker wrote:`const` just means the function won't mutate the object. `const` functions can be safely called on mutable, const and immutable objects. Non-`const` functions can only be called on mutable objects.On Thursday, 22 October 2015 at 03:19:49 UTC, MobPassenger wrote:what's the rationale ? what's guaranteed by the qualifier that's not already true without const ?code: --- struct Foo { bool opIn_r(T)(T t){return false;} }This needs to be marked with const: struct Foo { bool opIn_r(T)(T t) const {return false;} }
Oct 22 2015