On Sunday, 29 January 2023 at 03:29:45 UTC, FeepingCreature wrote:
>No, I mean
num1 = num2;
onlineapp.d(22): Error: cannot modify struct instance `num1` of type `Foo!int` because it contains `const` or `immutable` members
Sorry for writing an answer without doing the necessary unit tests. I forgot to put the type in parentheses. Here is the corrected version:
struct S(T)
{
import std.conv : to;
import std.traits : ImmutableOf;
immutable(T)[] data;
this(R)(R[] data)
{
this.data = data.to!(ImmutableOf!T[]);
}
string toString() const
{
import std.format : format;
return format("%s: %s", typeid(data), data);
}
}
unittest
{
S!char test1, test2;
alias TestType = typeof(test1.data);
import std.traits : isSomeString;
assert(is(TestType == string) &&
isSomeString!TestType);
test1 = S!char("bcd");
test1.data ~= "234";
test2 = test1;
assert(test1 == test2);
}
void main()
{
import std.stdio;
string str = "bcd";
auto str1 = S!char(str.dup);
auto str2 = S!char("abc");
str1 = str2;
str1.writeln; // const(immutable(char)[]): abc
str2.writeln; // const(immutable(char)[]): abc
}
SDB@79