C++17 之前的类型不完整?

use*_*370 5 c++ template-specialization variadic-templates c++11 c++17

我认为下面的代码是有效的 C++11,但 GCC (g++ (GCC) 8.0.0 20170528) 拒绝它;报告该变量的f类型不完整。但它确实使用该-std=c++17标志进行编译。谁能告诉我为什么?

#include <type_traits>

template <class> struct Foo;

template <
  template <template <class ...> class> class MM,
  template <class...> class M
>
struct Foo<MM<M>> {};

template <template <class ...> class, class...>
struct Bar { };

Foo<Bar<std::add_pointer>> f;
Run Code Online (Sandbox Code Playgroud)