https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59498

--- Comment #8 from Louis Dionne <ldionne.2 at gmail dot com> ---
I made further experiments to try and workaround this (I need it badly!) and
I found some things that might be of interest to you. The following test case
compiles on GCC 4.9.1 but not on Clang 3.5.0 (trunk):

    template <template <typename ...> class f>
    struct make {
        template <typename ...x>
        static constexpr auto apply(x...)
            -> decltype(f<x...>{}) // <- compiles on both when this is
commented
        {
            return f<x...>{};
        }
    };

    template <typename> struct f { }; // <- fails on GCC when this is variadic
    template <typename x> using alias = f<x>;


    int main() {
        make<alias>::apply(1);
    }


Now, if I change the definition of f to:

    template <typename...> struct f { };

then it fails to compile on both compilers. Finally, if I remove the
decltype(f<x...>{}) part of the apply function above, then it compiles
on both compilers regardless of f's definition.

Reply via email to