#include<iostream>
#include<vector>
using namespace std;
template < typename T, size_t N >
char ( & _ArraySizeHelper( T ( & arr) [ N] ) ) [ N] ;
#define countof( arr ) (sizeof( _ArraySizeHelper( arr ) ))
template < size_t N >
inline double MyFunction( double ( & x) [ N] ) {
int M = countof( x) ;
double s = 0.0 ;
for ( int i = 0 ; i < M; i++ ) {
s + = x[ i] ;
}
return s;
}
template < size_t N >
double BigFunction( double ( * PtrFunc) ( double ( & ) [ N] ) ,
const vector< int > & v ) {
int M = v.size ( ) ;
double x[ M] ;
for ( int i = 0 ; i < M; i++ ) {
x[ i] = 1.0 ;
}
double z = ( * PtrFunc) ( x ) ;
return z;
}
int main( ) {
vector< int > v;
for ( int i = 0 ; i < 10 ; i++ ) {
v.push_back ( i) ;
}
double w = BigFunction< 10 > ( & MyFunction, v ) ;
cout << w << endl;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4gPgpjaGFyICggJl9BcnJheVNpemVIZWxwZXIoIFQgKCZhcnIpW05dICkpW05dOwojZGVmaW5lIGNvdW50b2YoIGFyciApIChzaXplb2YoIF9BcnJheVNpemVIZWxwZXIoIGFyciApICkpCgp0ZW1wbGF0ZTwgc2l6ZV90IE4gPgppbmxpbmUgZG91YmxlIE15RnVuY3Rpb24oIGRvdWJsZSAoJngpW05dICkgewogICAgaW50IE0gPSBjb3VudG9mKHgpOwogICAgZG91YmxlIHMgPSAwLjA7CiAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBNOyBpKysgKSB7CiAgICAgICAgcyArPSB4W2ldOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRlPCBzaXplX3QgTiA+CmRvdWJsZSBCaWdGdW5jdGlvbiggZG91YmxlICgqIFB0ckZ1bmMpKCBkb3VibGUgKCYpW05dICksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPGludD4mIHYgKSB7CiAgICBpbnQgTSA9IHYuc2l6ZSgpOwogICAgZG91YmxlIHhbTV07CiAgICBmb3IoIGludCBpID0gMDsgaSA8IE07IGkrKyApIHsKICAgICAgICB4W2ldID0gMS4wOwogICAgfQogICAgZG91YmxlIHogPSAoKiBQdHJGdW5jKSggeCApOwogICAgcmV0dXJuIHo7Cn0KCmludCBtYWluKCkgewogICAgdmVjdG9yPGludD4gdjsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAgICAgICAgdi5wdXNoX2JhY2soaSk7CiAgICB9CiAgICBkb3VibGUgdyA9IEJpZ0Z1bmN0aW9uPCAxMCA+KCAmTXlGdW5jdGlvbiwgdiApOwogICAgY291dCA8PCB3IDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQoK
compilation info
prog.cpp: In instantiation of ‘double BigFunction(double (*)(double (&)[N]), const std::vector<int>&) [with unsigned int N = 10u]’:
prog.cpp:37:50: required from here
prog.cpp:28:31: error: invalid initialization of reference of type ‘double (&)[10]’ from expression of type ‘double [(((sizetype)(((ssizetype)M) + -1)) + 1)]’
stdout