PR16090: C++1y: treat undeduced 'auto' as a literal type, so that constexpr

function templates can use it as a return type.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182433 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Richard Smith 2013-05-21 22:29:20 +00:00
Родитель 440d456c5c
Коммит bdaeaed3e3
2 изменённых файлов: 12 добавлений и 0 удалений

Просмотреть файл

@ -1196,6 +1196,11 @@ bool Type::isLiteralType(ASTContext &Ctx) const {
return true; return true;
} }
// If this type hasn't been deduced yet, then conservatively assume that
// it'll work out to be a literal type.
if (isa<AutoType>(BaseTy->getCanonicalTypeInternal()))
return true;
return false; return false;
} }

Просмотреть файл

@ -708,3 +708,10 @@ namespace switch_stmt {
static_assert(test_copy("hello world", 10), ""); static_assert(test_copy("hello world", 10), "");
static_assert(test_copy("hello world", 10), ""); static_assert(test_copy("hello world", 10), "");
} }
namespace deduced_return_type {
constexpr auto f() { return 0; }
template<typename T> constexpr auto g(T t) { return t; }
static_assert(f() == 0, "");
static_assert(g(true), "");
}