#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;
}

