[ADT] Add the worlds simplest STL extra. Or at least close to it.
authorChandler Carruth <chandlerc@gmail.com>
Fri, 19 Aug 2016 02:07:51 +0000 (02:07 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 19 Aug 2016 02:07:51 +0000 (02:07 +0000)
commite8529c28f1c109e0c5f7be3ff96b17248c69b9bb
treed5e054158235e407952a82c9283d3b1a97c770be
parent964cc53d9a7411bc2d7ecc2bf7958ac5c65da32e
[ADT] Add the worlds simplest STL extra. Or at least close to it.

This is a little class template that just builds an inheritance chain of
empty classes. Despite how simple this is, it can be used to really
nicely create ranked overload sets. I've added a unittest as much to
document this as test it. You can pass an object of this type as an
argument to a function overload set an it will call the first viable and
enabled candidate at or below the rank of the object.

I'm planning to use this in a subsequent commit to more clearly rank
overload candidates used for SFINAE. All credit for this technique and
both lines of code here to Richard Smith who was helping me rewrite the
SFINAE check in question to much more effectively capture the intended
set of checks.

llvm-svn: 279197
llvm/include/llvm/ADT/STLExtras.h
llvm/unittests/ADT/CMakeLists.txt
llvm/unittests/ADT/STLExtrasTest.cpp [new file with mode: 0644]