[cfe-dev] Function Instantiation: Where? Or is it?
    Douglas Gregor 
    dgregor at apple.com
       
    Mon Jan 31 08:42:19 PST 2011
    
    
  
On Jan 31, 2011, at 8:12 AM, Larisse Voufo wrote:
> 
> Folks --
> 
> This has had me puzzled for a while, and I could use an answer asap.
> I am implementing concepts in Clang and seem to be missing a crucial piece of understanding, either of C++, or of Clang. 
> Basically, I have gotten mostly everything else implemented and working fine to the extend that I want them to, except for concept members instantiation (?).
> 
> Basic Example:  instantiation.cpp
> ----------------------
> 
> concept B<typename T> {
>   void f(int) { }
> }
> 
> concept_map B<int> {
>   void f(int) { }
> }
> 
> template<typename T>
> requires (B<T>) 
> void func(T a) {
> //    f(a);
>     f(0);
> }
> 
> int main(int argc, char **argv) 
> { 
>     int i=0;
>     func<int>(i); 
> }
> 
> Compilation:  clang++ instantiation.cpp -o example
> ----------------------
> It seems to be failing at link time, with the following error message:
> 
> Undefined symbols:
>   "__ZN1B1fEi", referenced from:
>       __Z4funcIiEvT_ in cc-MXLAc6.o
> ld: symbol(s) not found
> 
> 
> Any idea? Anyone? 
> 1) At which point are functions marked for instantiation?
Look for calls to Sema::MarkDeclarationReferenced throughout Sema.
> 2 ) At which point are they instantiated ?
At the end of the translation unit.
> 3) If instantiated, why would they not be visible by the linker? 
Probably because the template instantiation mechanism couldn't find the definition of B<int>::f(int).
	- Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110131/cf456d88/attachment.html>
    
    
More information about the cfe-dev
mailing list