Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-03-10 07:28:17


"Allen Yao" <yaozhen_at_[hidden]> writes:

> It seems that gcc does not allow this kind of template argument deduction:
>
> template <int N>
> void f(int a[N])
> {
> for (int i = 0; i < N; i++)
> cout << a[i] << " ";
> cout << endl;
> }
>
> int main()
> {
> int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
>
> f(a);
> }
>
> The error message is:
>
> error: no matching function for call to `f(int[10])'
>
> I would like to know how to fix this. Is there any workaround?
> Or if I am missing something?

You're missing something. Your declaration of f is equivalent to:

       template <int N>
       void f(int* a);

try:

       template <int N>
       void f(int a(&)[N])
                   ^^^
instead.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk