www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Passing a sting as 'in char[]' yields "immutable is not callable using

reply chmike <christophe meessen.net> writes:
I have an immutable final class with methods with the following 
signature

----
import std.typecons;

immutable class Base{
     ...
      safe pure nothrow
     final Tuple!(int,"value",bool,"hasValue") value(const string 
name) { return nameImpl(value); }
      safe pure nothrow
     protected abstract Tuple!(int,"value",bool,"hasValue") 
valueImpl(const string name);
     ...
}

final immutable class Info: Base{
     ...
      safe pure nothrow
     static Tuple!(int,"value",bool,"hasValue") value(const string 
name)
     {
         auto p = name in name2value_; // <-- Error in this line
         return (p) ? Tuple!(int,"value",bool,"hasValue")(*p,true) 
: Tuple!(int,"value",bool,"hasValue")(int.init,false);
     }
      safe pure nothrow
     protected override Tuple!(int,"value",bool,"hasValue") 
valueImpl(const string name) { return value(name); }
     ...
     enum int[string] name2value_ = [ "info_1" : 1, ...];

}
----

When trying to compile this I get the following error

  Error: function Info.value (const(string) name) immutable is not 
callable using argument types ()

What is the error ? Why is argument types () ?
Jun 08 2016
next sibling parent chmike <christophe meessen.net> writes:
     final Tuple!(int,"value",bool,"hasValue") value(const 
 string name) { return nameImpl(value); }
Sorry, this is the error. It should have been final Tuple!(int,"value",bool,"hasValue") value(const string name) { return valueImpl(name); }
Jun 08 2016
prev sibling parent NX <nightmarex1337 hotmail.com> writes:
String is an alias for 'immutable(char)[]'.

I assume you meant const(char)[] instead of 'const string'?

P.S. always use parentheses.
Jun 08 2016