C++17 template deduction guide not used for empty parameter set?
Consider the following reduced example which can also be viewed at https://godbolt.org/g/Et56cm : #include <utility> template <class T> struct success { T value; constexpr success(T &&v) : value(std::move(v)) { } constexpr success(const T &v) : value(v) { } }; template <> struct success<void> { }; template <class T> success(T /*unused*/)->success<T>; success()->success<void>; int main(void) { auto a = success{5}; // works auto b = success{}; // works auto c = success{"hello"}; // works auto d = success(5); // works auto e = success(); // FAILS! auto f = success("hello"); // works static_assert