digitalmars.D.learn - Cannot deduce from type
- Chris (20/20) Sep 22 2014 Why is that?
- anonymous (7/27) Sep 22 2014 output.data is a method returning a string. That is, the returned
- Chris (4/36) Sep 22 2014 Because I only append "world!" to it. You would have to print the
- kiran kumari (3/23) Sep 24 2014 see ore example
- kiran kumari (3/23) Sep 24 2014 see more example
Why is that? import std.stdio, std.array void main() { auto output = appender!(string); output ~= "world!"; // output.data.insertInPlace(0, "Hello, "); // Doesn't work auto asString = output.data; asString.insertInPlace(0, "Hello, "); // Works writeln(asString); // prints "Hello, world!" } Error: template std.array.insertInPlace cannot deduce function from argument types !()(string, int, string), candidates are: .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1031): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (!isSomeString!(T[]) && allSatisfy!(isInputRangeOrConvertible!T, U) && U.length > 0) .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1097): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (isSomeString!(T[]) && allSatisfy!(isCharOrStringOrDcharRange, U))
Sep 22 2014
On Monday, 22 September 2014 at 14:45:31 UTC, Chris wrote:Why is that? import std.stdio, std.array void main() { auto output = appender!(string); output ~= "world!"; // output.data.insertInPlace(0, "Hello, "); // Doesn't work auto asString = output.data; asString.insertInPlace(0, "Hello, "); // Works writeln(asString); // prints "Hello, world!" } Error: template std.array.insertInPlace cannot deduce function from argument types !()(string, int, string), candidates are: .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1031): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (!isSomeString!(T[]) && allSatisfy!(isInputRangeOrConvertible!T, U) && U.length > 0) .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1097): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (isSomeString!(T[]) && allSatisfy!(isCharOrStringOrDcharRange, U))output.data is a method returning a string. That is, the returned string is not an lvalue, it doesn't have an address, it cannot be passed in a ref parameter. But insertInPlace's first parameter is ref. So, no can do. Also note that `writeln(output.data);` prints "world!" without "Hello, ".
Sep 22 2014
On Monday, 22 September 2014 at 15:00:09 UTC, anonymous wrote:On Monday, 22 September 2014 at 14:45:31 UTC, Chris wrote:I see. Thanks.Why is that? import std.stdio, std.array void main() { auto output = appender!(string); output ~= "world!"; // output.data.insertInPlace(0, "Hello, "); // Doesn't work auto asString = output.data; asString.insertInPlace(0, "Hello, "); // Works writeln(asString); // prints "Hello, world!" } Error: template std.array.insertInPlace cannot deduce function from argument types !()(string, int, string), candidates are: .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1031): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (!isSomeString!(T[]) && allSatisfy!(isInputRangeOrConvertible!T, U) && U.length > 0) .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1097): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (isSomeString!(T[]) && allSatisfy!(isCharOrStringOrDcharRange, U))output.data is a method returning a string. That is, the returned string is not an lvalue, it doesn't have an address, it cannot be passed in a ref parameter. But insertInPlace's first parameter is ref. So, no can do.Also note that `writeln(output.data);` prints "world!" without "Hello, ".Because I only append "world!" to it. You would have to print the variable "asString" to get "Hello, world!"
Sep 22 2014
On Monday, 22 September 2014 at 14:45:31 UTC, Chris wrote:Why is that? import std.stdio, std.array void main() { auto output = appender!(string); output ~= "world!"; // output.data.insertInPlace(0, "Hello, "); // Doesn't work auto asString = output.data; asString.insertInPlace(0, "Hello, "); // Works writeln(asString); // prints "Hello, world!" } Error: template std.array.insertInPlace cannot deduce function from argument types !()(string, int, string), candidates are: .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1031): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (!isSomeString!(T[]) && allSatisfy!(isInputRangeOrConvertible!T, U) && U.length > 0) .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1097): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (isSomeString!(T[]) && allSatisfy!(isCharOrStringOrDcharRange, U))see ore example ://techgurulab.com/course/java-quiz-online/ore example
Sep 24 2014
On Monday, 22 September 2014 at 14:45:31 UTC, Chris wrote:Why is that? import std.stdio, std.array void main() { auto output = appender!(string); output ~= "world!"; // output.data.insertInPlace(0, "Hello, "); // Doesn't work auto asString = output.data; asString.insertInPlace(0, "Hello, "); // Works writeln(asString); // prints "Hello, world!" } Error: template std.array.insertInPlace cannot deduce function from argument types !()(string, int, string), candidates are: .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1031): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (!isSomeString!(T[]) && allSatisfy!(isInputRangeOrConvertible!T, U) && U.length > 0) .dvm/compilers/dmd-2.066.0/linux/bin/../../src/phobos/std/array.d(1097): std.array.insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff) if (isSomeString!(T[]) && allSatisfy!(isCharOrStringOrDcharRange, U))see more example http://techgurulab.com/course/java-quiz-online/
Sep 24 2014