Re:[boost] Re: [serialization17] demo_fast_binary_archive.cpp CANNOT compile in gcc 3.3.3

David Abrahams wrote:
"Allen Yao" <yaozhen@ustc.edu> 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.
Hmm - that didn't work for me. But with the above hint I made the following compile and function with both VC 7.1 and gcc. template <int N> void f(int (& a)[N]) ^^^^ I had never been able to get demo_fast_binary_archive but could never figure out the reason - Mystery Solved ! Robert Ramey

"Robert Ramey" <ramey@rrsd.com> writes:
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.
Hmm - that didn't work for me. But with the above hint I made the following compile and function with both VC 7.1 and gcc.
template <int N> void f(int (& a)[N]) ^^^^
Err, whoops, sorry. Yeah, Robert has the right solution. -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
David Abrahams
-
Robert Ramey