I had a problem with vibe.d which I've dustmited to code below.
Problem is that whet I use -inline switch (used by dub with -b release), program fails. Without it it is ok. GDC and LDC2 works ok.
I don't understand what is happening here, but I guess the problem can be with serialize function overrides with different results? But then why it runs ok with foreach removed in serializeImpl?
import std.traits;
struct JsonStringSerializer
{
void getSerializedResult() { }
}
void serializeToJson(T)(T value)
{
serialize!(JsonStringSerializer)(value);
}
auto serialize(Serializer, T)(T value)
{
auto serializer = Serializer();
serialize(serializer, value);
return serializer.getSerializedResult;
}
void serialize(Serializer, T)(Serializer serializer, T value)
{
serializeImpl!(Serializer, T)(serializer, value);
}
void serializeImpl(Serializer, T)(Serializer , T value)
{
foreach (i; value) { }
}
int main()
{
serializeToJson(["test"]);
return 0;
}
Comment #1 by dlang-bugzilla — 2015-05-09T20:33:51Z