результат не является ice. Вот так является: Код (Text): #include <iostream> template <class T, int N> char (&size(T(&)[N]))[N]; int main() { int a[23]; int b[sizeof(size(a))]; std::cout << sizeof(size(b)) << std::endl; }
nop_ Функция и принимает, и возвращает ссылку на массив? И в чем тут айс? Вот секс с двумя азиатками - это я понимаю айс!
Потому что результат (размер массива) становится известным только на этапе выполнения, а не компиляции. Код (Text): int a[2]; int b[get_sz(a)]; // (VC): expected constant expression
Да. Размер массива, на который возвращается ссылка равен выведенному из аргумента размеру. Причем у функция только объявлена, но не определена. Она не вызывается. ice - integral constant expression.
nop_ размер становится известным на этапе компиляции, т.к. именно на стадии компиляции происходит вывод аргументов шаблона. другое дело, что вызов функции не является сonstant expression.
nop_ Гы) Так размер и результат это не одно и то же, а ты так пишешь как будто одно. Да и результат тут никого не интересует.