来自cpprefference.com的模板参数特化示例不起作用

pet*_*ter 4 c++ c++11

我在http://en.cppreference.com/w/cpp/language/partial_specialization上找到了这个例子

template <int I, int J, int K> struct B {};
template <int I> struct B<I, I*2, 2> {};  // OK: first parameter is deducible
Run Code Online (Sandbox Code Playgroud)

使用-std = c ++ 11和-std = c ++ 14编译时出错

怎么编译呢?或者可能是错误的例子?

error: template argument ‘(I * 2)’ involves template parameter(s)
 template <int I> struct B<I, I*2, 2> {};  // OK: first parameter is deducible
Run Code Online (Sandbox Code Playgroud)

小智 6

这是最近的语言更改,甚至几个编译器的当前版本还没有实现它.这是CWG问题1315,其中列出了"暂时准备好"的状态,尽管根据@bogdan的评论,这一变化已被接受进入标准.在更改之前,由于编译器在其错误消息中显示的原因完全无效.

改变GCC的行为是作为PR 77781在GCC错误跟踪器上.