Variadic constructor conflict
Simen Kjaeraas
simen.kjaras at gmail.com
Wed Jan 30 10:49:48 PST 2013
On 2013-01-30, 17:08, andrea9940 wrote:
> This code compiles fine:
> ------------
> struct Vector(T, uint SIZE)
> {
> T[SIZE] vector;
>
> this(T value) {
> foreach (ref v; vector) v = value;
> }
> }
> alias Vector!(int, 3) Vec3i;
> ------------
>
> but if I add a variadic constructor:
>
> ------------
> struct Vector(T, uint SIZE)
> {
> [...]
>
> this(T...)(T values) if (values.length == SIZE) {
> foreach (i, v; values) vector[i] = v;
> }
> }
> alias Vector!(int, 3) Vec3i;
> ------------
>
> I get:
> main.d(54): Error: template main.Vector!(int, 3).Vector.__ctor(T...)(T
> values) if (values.length == SIZE) conflicts with constructor
> main.Vector!(int, 3).Vector.this at main.d(46)
> main.d(111): Error: template instance main.Vector!(int, 3) error
> instantiating
>
>
> I think that should not happen because when there is a conflict call
> like Vec3i(3) the compiler must(?) use the specialized function...
Known bug. For the moment, the workaround is to templatize all
constructors:
struct Vector(...)
{
this()(T value ) {
...
--
Simen
More information about the Digitalmars-d-learn
mailing list