Hmm.. Yes, sounds reasonable. So the 0-array declaration here does not

go under SFINAE?

The failure is an instantiation failure that comes before the

substitution can even be attempted. Once vector<0is instantiable

(say, by providing a specialization) then the substitution does fail

without an error.

I am still not convinced. Let's take another try.. I simplified the

problem:

template <int N>

struct Vector

{

int data_[N];

};

template <int N>

struct Matrix

{

};

template <int N>

int operator *(

const Vector<N>&,

const Matrix<N>&)

{

return 0;

}

template <int N>

int operator *(

const Vector<N - 1>&,

const Matrix<N>&)

{

return 1;

}

int main()

{

Matrix<1transform;

Vector<1translation;

int result = translation * transform;

return 0;

}

If I were a compiler I would act like this:

1) If in the first function I take the Matrix<1to conclude N = 1, then

the other parameter is Vector<1and we have a match.

2) If in the first function I take the Vector<1to conclude N = 1, then

the other parameter is Matrix<1and we have a match.

3) If in the second function I take the Matrix<1to conclude N = 1,

then the other parameter is Vector<0and we don't have a match.

4) If in the second function I take the Vector<1to conclude N = 2,

then the other parameter is Matrix<2and we don't have a match.

Thus, without ever needing instantiation of any template, we have

concluded that the first function is the only possible candidate. Why

would the compiler need the instantiation of Vector<0or Matrix<2>?

Btw, I reposted this question to comp.lang.c++.moderated before you

replied this second time. I thought there will be no more replies

because this newsgroup has such a traffic all the time. The comment I

make there is written before you replied, so it is not to say that you

couldn't deliver the answer.

Anyway, you still haven't convinced me of the reasons which lead to the

instantion of Vector<0>.. Examples showing its necessity and/or relevant

quotes from the standard would help.

--

Kalle Rutanen

http://kaba.hilvi.org