http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59141
Bug ID: 59141 Summary: [C++11] Bogus copy constructor required for direct initialization with empty variadic pack Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ppluzhnikov at google dot com Possibly related to PR58940 Google ref: b/11696404 Confirmed with current trunk: g++ (GCC) 4.9.0 20131114 (experimental) g++ -c -std=c++11 t.cc t.cc: In instantiation of ‘void Construct(Args ...) [with Args = {}]’: t.cc:13:13: required from here t.cc:8:26: error: use of deleted function ‘NonCopyable::NonCopyable(const NonCopyable&)’ NonCopyable obj(args...); ^ t.cc:3:3: note: declared here NonCopyable(const NonCopyable&) = delete; ^ The test: struct NonCopyable { NonCopyable() {} NonCopyable(const NonCopyable&) = delete; }; template <class... Args> void Construct(Args... args) { NonCopyable obj(args...); (void)obj; } int main() { Construct(); } There is no error if 'obj' is initialized with {args...} instead of (args...). There is also no error if NonCopyable has a constructor from int and an int is passed to Construct.