llvm-project/clang
David Majnemer 766e259e38 Sema: Do not allow template declarations inside local classes
Summary:
Enforce the rule in C++11 [temp.mem]p2 that local classes cannot have
member templates.

This fixes PR16947.

N.B.  C++14 has slightly different wording to afford generic lambdas
declared inside of functions.

Fun fact:  Some formulations of local classes with member templates
would cause clang to crash during Itanium mangling, such as the
following:

void outer_mem() {
  struct Inner {
    template <typename = void>
    struct InnerTemplateClass {
      static void itc_mem() {}
    };
  };
  Inner::InnerTemplateClass<>::itc_mem();
}

Reviewers: eli.friedman, rsmith, doug.gregor, faisalv

Reviewed By: doug.gregor

CC: cfe-commits, ygao

Differential Revision: http://llvm-reviews.chandlerc.com/D1866

llvm-svn: 193144
2013-10-22 04:14:18 +00:00
..
INPUTS
bindings [libclang] Introduce clang_Type_getCXXRefQualifier whichexposes ref-qualifier information of function type. 2013-10-11 19:58:38 +00:00
docs Updated and added to the Consumed documentation. 2013-10-21 20:54:06 +00:00
examples Add irreader to the component list, because ParseIR is called. 2013-10-19 08:33:11 +00:00
include Sema: Do not allow template declarations inside local classes 2013-10-22 04:14:18 +00:00
lib Sema: Do not allow template declarations inside local classes 2013-10-22 04:14:18 +00:00
runtime [LSan] Add support for building standalone LSan runtime to Make build (clang part) 2013-08-20 14:49:36 +00:00
test Sema: Do not allow template declarations inside local classes 2013-10-22 04:14:18 +00:00
tools Rename some functions for consistency. 2013-10-17 15:37:26 +00:00
unittests Revert "Refactor DynTypedMatcher into a value type class, just like Matcher<T>." 2013-10-21 22:26:36 +00:00
utils [AArch64] Add support for NEON scalar extract narrow instructions. 2013-10-18 14:03:36 +00:00
www Implement C++1y sized deallocation (n3778). This is not enabled by -std=c++1y; 2013-09-29 04:40:38 +00:00
.arcconfig
.clang-format Switch the default mode for clang-format to '-file'. Make 'LLVM' the 2013-09-02 07:42:02 +00:00
.gitignore
CMakeLists.txt Revert commits r190613, r190560 and r190557. 2013-10-01 17:31:40 +00:00
CODE_OWNERS.TXT Revert r185557 as it was a bit (a lot) premature. 2013-07-03 20:37:50 +00:00
INSTALL.txt Reverting test commit 2013-06-07 05:33:21 +00:00
LICENSE.TXT
Makefile
ModuleInfo.txt
NOTES.txt
README.txt

README.txt

//===----------------------------------------------------------------------===//
// C Language Family Front-end
//===----------------------------------------------------------------------===//

Welcome to Clang.  This is a compiler front-end for the C family of languages
(C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM
compiler infrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things
beyond just compiling code: we intend for Clang to be host to a number of
different source level tools.  One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read
the relevant web sites.  Here are some pointers:

Information on Clang:              http://clang.llvm.org/
Building and using Clang:          http://clang.llvm.org/get_started.html
Clang Static Analyzer:             http://clang-analyzer.llvm.org/
Information on the LLVM project:   http://llvm.org/

If you have questions or comments about Clang, a great place to discuss them is
on the Clang development mailing list:
  http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

If you find a bug in Clang, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/