これはclangの問題のようです(私はすでにbug to clangを開いています)。私が間違いをしていないことを確認してください。宣言の使用はDの基本クラス(エイリアス)ですが、有効とは認識されません
は、以下のコードを検討:
struct B { };
template<typename...>
struct D;
template<typename T, typename U, typename... A>
struct D<T, U, A...>: D<U, A...> {
using C = D<U, A...>; // (1)
// using D<U, A...>::D; // (2)
// using C::C; // (3)
using C::D; // (4)
};
template<typename T>
struct D<T>: T { using T::T; };
int main() {
D<int, double, B> d{};
}
ライン(2)(コメントアウト場合(1)及び(4))及び(コメントアウト場合(4))、予想通り(3)が、動作( 1)()そのまま上記の例は次のエラーを与える:
11 : error: dependent using declaration resolved to type without 'typename'
using C::D;[...]
11 : error: using declaration refers into 'C::', which is not a base class of 'D'
using C::D;
とにかく、C
はD<U, A...>
の別名であり、それはD<T, U, A...>
の基本クラスです。
私が知る限り、そのスニペットはコンパイルする必要があります。私が間違っている?
GCCは少なくともv4.8.1からv6.1までコンパイルすることに注意してください。
http://wg21.link/CWG2070 –
だから、それはにISN修正そのうち問題ですまだ標準の一部ではないでしょうか?それは議論されるようにそれを言及する。 – skypjack