
#include <iostream>

template <typename theType, size_t theSize>
char (& AsArray(theType (&) [theSize])) [theSize];

int main(int argc, char * argv[])
{
	struct { int i; double d; } array[10];
	double * notAnArray;

	// Funktioniert.
	std::cout << sizeof(AsArray(array)) << std::endl;

	// Funktioniert.
	std::cout << sizeof(array) / sizeof(array[0]) << std::endl;

	// Funktioniert nicht; soll es auch nicht!
	// std::cout << sizeof(AsArray(notAnArray)) << std::endl;

	// Funktioniert; undefiniertes Verhalten. 
	std::cout << sizeof(notAnArray) / sizeof(notAnArray[0]) << std::endl;

	return 0;
}