"Wartość" szablonu musi być obecna podczas kompilacji.
template<int x> struct X {};
Nawet jeśli nie wiążemy odniesienia lub nie podajemy tutaj wskaźnika, kompilator musi znać wartość przekazanych elementów podczas kompilacji.
Zastępowanie int &x
z int x
jest tutaj celowe. Rzeczy o int & jest poprawnie odpowiedziała. Chciałem tylko wskazać, że ma on zastosowanie do wszystkich nieopisanych argumentów szablonu.
- „Wartość” z odniesieniem jest odniesienie (realizacja uzależniona rzeczywiście wskaźnik w większości z nich)
- adres obiektu muszą być znane w czasie kompilacji
- The " wartość "wskaźnika
template<int*>
to adres ...
- ... co z kolei musi oczywiście być również znane tutaj.
- „Wartość” danego typu jest wartością sama w sobie, która również musi być znany w czasie kompilacji
X<local_var> x; // will not work, local_var does not exist at compile time
X<1> x; // works since 1 is known
Chciałem tylko (oprócz Andy odpowiedź), aby uniknąć jakichkolwiek wniosków, które sugerowałyby użycie typu wartości zamiast odniesienia.
Argumenty szablonu są częścią * typu *. Jaki byłby typ "x" w twoim przykładzie? –