Честно говоря, я не могу придумать много смысла для этого типа конструкции, хотя я уверен, что они, вероятно, существуют. Мне кажется, что вы ограничены, потому что n должно эффективно существовать в глобальной области видимости, чтобы f () была действительной. Вы можете сделать что-то вроде следующего:
#include <iostream>
using namespace std;
template<int &n> void sq(){
n *= n;
}
int something = 10;
int main()
{
cout << something << endl;
sq<something>();
cout << something << endl;
return 0;
}
но я не вижу, что это действительно даст вам, чего нельзя достичь с помощью не шаблонных функций. Будет ли sq()
эффективно рассчитываться во время компиляции?