https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85493
--- Comment #2 from Ihor Rudynskyi <ihorelo at mail dot ru> --- Summarizing: g++ 7.2 allows to write this code. struct no_def { no_def() = delete; }; template<typename...> int foo() = delete; template<typename...> void test() { decltype(no_def()) a1{}; decltype(no_def(1,2,3)) a2{}; decltype(foo<>()) a3{}; } int main() { test<>(); } but according to godbolt a3 case seems to have been fixed on trunk