[PATCH] Fix core-DR1755 & 727 & llvm-PR17294 & PR16906 - partial & explicit specializations of member templates (class/variable/function)

Faisal Vali faisalv at gmail.com
Fri May 23 13:41:27 PDT 2014


Added support for class scope explicit specializations of member template functions, variables and classes.

Will add a more detailed overview of the changes.

Essentially the following code now works (and similarly for class and variable templates):

template<class T> struct A {
  template<class V> V* foo(V*, T*) { return 0; }
  
};

template<class T> template<>
char* A<T>::foo(char*, T*) { return (char*)(T*)0; }

char *pc = A<int>{}.foo((char*)0, (int*)0);

Please look at the testfile sematemplate/member-templates.cpp for more in depth examples.

Will modify the code once I have feedback!

http://reviews.llvm.org/D3445

Files:
  include/clang/AST/DeclTemplate.h
  include/clang/Basic/DiagnosticSemaKinds.td
  include/clang/Sema/Sema.h
  include/clang/Sema/SemaInternal.h
  include/clang/Sema/Template.h
  lib/AST/ASTDumper.cpp
  lib/AST/Decl.cpp
  lib/AST/DeclTemplate.cpp
  lib/Parse/ParseAST.cpp
  lib/Sema/SemaDecl.cpp
  lib/Sema/SemaExpr.cpp
  lib/Sema/SemaTemplate.cpp
  lib/Sema/SemaTemplateDeduction.cpp
  lib/Sema/SemaTemplateInstantiate.cpp
  lib/Sema/SemaTemplateInstantiateDecl.cpp
  lib/Sema/SemaType.cpp
  test/CXX/drs/dr0xx.cpp
  test/CXX/drs/dr5xx.cpp
  test/CXX/temp/temp.decls/temp.class.spec/p6.cpp
  test/CXX/temp/temp.spec/temp.expl.spec/p16.cpp
  test/SemaCXX/cxx1y-variable-templates_in_class.cpp
  test/SemaCXX/cxx1y-variable-templates_top_level.cpp
  test/SemaTemplate/explicit-specialization-member.cpp
  test/SemaTemplate/member-templates.cpp
  test/SemaTemplate/ms-class-specialization-class-scope.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3445.9775.patch
Type: text/x-patch
Size: 234025 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140523/b38be34e/attachment.bin>


More information about the cfe-commits mailing list