-
Notifications
You must be signed in to change notification settings - Fork 36
Open
Description
There seems to be some weird behavior when you have a function that takes a slice with a const(T)* iterator and try to handle cases with labels. The errors I get as it is is that some of these match multiple functions for reasons that don't quite make sense. I know there's some part of the mir_slice code that converts things to const, but I've never really dug into it to understand how it works.
The code below doesn't have errors when you replace the const(T)* with T*. Alternately, if you replace the int*s with const(int)*s, then the errors go away.
/+dub.sdl:
dependency "mir-algorithm" version="*"
+/
import mir.ndslice.slice;
import mir.ndslice.allocation;
import std.stdio: writeln;
void foo(T)(Slice!(const(T)*, 2u, Contiguous) a)
{
writeln(typeid(typeof(a)));
writeln("here0");
}
void foo(T)(Slice!(const(T)*, 2u, Contiguous, int*) a)
{
writeln(typeid(typeof(a)));
writeln("here1");
}
void foo(T)(Slice!(const(T)*, 2u, Contiguous, int*, int*) a)
{
writeln(typeid(typeof(a)));
writeln("here2");
}
void main()
{
auto X = slice!double(3, 3);
auto X1 = slice!(double, int)(3, 3);
auto X2 = slice!(double, int, int)(3, 3);
writeln(typeid(typeof(X)));
foo(X);
writeln(typeid(typeof(X1)));
foo(X1); //error
writeln(typeid(typeof(X2)));
foo(X2); //error
writeln("done");
}Metadata
Metadata
Assignees
Labels
No labels