#include <iostream>
using namespace std;

template<int N>
void increment(int (&v)[N])
{
	// No problem
	int w[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 9 };
	for (int& x : w){
		std::cout << "range-for-statement: " << ++x << "\n";
	}

	// error: cannot build range expression with array function 
	// parameter 'v' since parameter with array type 'int []' is 
	// treated as pointer type 'int *'
	for (int x : v){
		std::cout << "printing " << x << "\n";
	}

	// No problem
	for (int i = 0; i < 10; i++){
		int* p = &v[i];
	}
}

int main()
{
	int v[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 9 };
	increment(v);
}