#include <iostream>
typedef unsigned int uint;
template<class D> struct Array { };
template<uint n, class D> struct Alias
{
typedef Array<D> Arr;
};
template<uint n, class D> float scalar_product( Array<D>& x, Alias< n, D > :: Arr& y ) { return 0; }
int main(int argc, char** argv)
{
Array<uint> aa;
std::cout << scalar_product(aa, aa) << '\n';
return 0;
}
пробовал g++ 4.1.1 и 4.3.2
test2.cxx:12: error: ‘struct Alias<n, D>::Arr’ is not a type <--- это чо?
test2.cxx: In function ‘int main(int, char**)’:
test2.cxx:17: error: no matching function for call to ‘scalar_product(Array<unsigned int>&, Array<unsigned int>&)’ <--- а это понятное следствие
UPDATE: если вас путают разные uint-ы, то можно s/Array<uint>/Array<float>/