Quantcast
Channel: User Marco A. - Stack Overflow
Viewing all articles
Browse latest Browse all 45

Answer by Marco A. for How is a template instantiated?

$
0
0

In your specific case a declaration doesn't mean an instantiation

#include <iostream>using namespace std;template <typename T> class Stack {  typedef typename T::ThisDoesntExist StaticAssert; // T::ThisDoesntExist doesn't exist at all!};void f1(Stack<char>); // No instantiation, compilesclass Exercise {  Stack<double> &rsd; // No instantiation, compiles (references don't need instantiation, are similar to pointers in this)  Stack<int>    si; // Instantiation! Doesn't compile!!};int main(){  Stack<char> *sc; // No Instantiation, this compiles successfully since a pointer doesn't need instantiation  f1(*sc); // Instantiation of Stack<char>! Doesn't compile!!  int iObj = sizeof(Stack< std::string >); // Instantiation of Stack<std::string>, doesn't compile!!}

notice the pointer/reference stuff: they don't require instantiation since no data is actually allocated (a pointer is just a few bytes to contain the address, has no need to have all the data stored.. take a look at the pimpl idiom ).

Only when stuff is allocated then the template has to be completely resolved (and that happens at compile-time, that's why they usually need both declaration and definition.. there's no linking phase yet)


Viewing all articles
Browse latest Browse all 45

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>