Try contextually converting condition of constexpr if to Boolean value
authorIsmail Pazarbasi <ismail.pazarbasi@gmail.com>
Wed, 7 Sep 2016 18:24:54 +0000 (18:24 +0000)
committerIsmail Pazarbasi <ismail.pazarbasi@gmail.com>
Wed, 7 Sep 2016 18:24:54 +0000 (18:24 +0000)
commit4a00774e59c71864e8d65b5dbdb42b3cb84e77b5
tree14df9d464d067cf8bc78c53debde873d562bda2f
parentf100d4e93dde41d0c2a77e20e4c215c329e5e36f
Try contextually converting condition of constexpr if to Boolean value

Summary:
C++1z 6.4.1/p2:
 If the if statement is of the form if constexpr, the value of the
 condition shall be a contextually converted constant expression of type
 bool [...]
C++1z 5.20/p4:
 [...] A contextually converted constant expression of type bool is an
 expression, contextually converted to bool (Clause4), where the
 converted expression is a constant expression and the conversion
 sequence contains only the conversions above. [...]

Contextually converting result of an expression `e` to a Boolean value
requires `bool t(e)` to be well-formed.

An explicit conversion function is only considered as a user-defined
conversion for direct-initialization, which is essentially what
//contextually converted to bool// requires.

Also, fixes PR28470.

Reviewers: rsmith

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D24158

llvm-svn: 280838
clang/lib/Sema/SemaOverload.cpp
clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp
clang/test/CodeGenCXX/cxx1z-constexpr-if.cpp