forked from OSchip/llvm-project
d6a150829b
This implements something like the current direction of DR1581: we use a narrow syntactic check to determine the set of places where a constant expression could be evaluated, and only instantiate a constexpr function or variable if it's referenced in one of those contexts, or is odr-used. It's not yet clear whether this is the right set of syntactic locations; we currently consider all contexts within templates that would result in odr-uses after instantiation, and contexts within list-initialization (narrowing conversions take another victim...), as requiring instantiation. We could in principle restrict the former cases more (only const integral / reference variable initializers, and contexts in which a constant expression is required, perhaps). However, this is sufficient to allow us to accept libstdc++ code, which relies on GCC's behavior (which appears to be somewhat similar to this approach). llvm-svn: 291318 |
||
---|---|---|
.. | ||
p1.cpp | ||
p2.cpp | ||
p3.cpp | ||
p4.cpp | ||
p5.cpp | ||
p7.cpp | ||
p8.cpp | ||
p9-0x.cpp | ||
p9.cpp | ||
p10-0x.cpp | ||
p10.cpp | ||
p11-0x.cpp | ||
p11.cpp | ||
p12.cpp | ||
p13.cpp | ||
p15-cxx0x.cpp | ||
p15.cpp |