LINUX.ORG.RU

История изменений

Исправление vzzo, (текущая версия) :

template <typename T>
constexpr typename std::enable_if<std::is_array<T>::value, unsigned int>::type getArrayLength(const T&) {
	return std::extent<T>::value;
}

template<unsigned int Size, typename T>
constexpr unsigned int getArrayLength(T*) {
	return Size;
}

int main() {
	const int a[20] = {0};
	cout << getArrayLength(a); // 20
	cout << getArrayLength<100>(a); // 100
	return 0;
}

Исходная версия vzzo, :

template <typename T>
 typename std::enable_if<std::is_array<T>::value, unsigned int>::type getArrayLength(const T& s) {
	return std::extent<T>::value;
}

template<unsigned int Size, typename T>
 unsigned int getArrayLength(T*) {
	return Size;
}

int main() {
	const int a[20] = {0};
	cout << getArrayLength(a); // 20
	cout << getArrayLength<100>(a); // 100
	return 0;
}