で-std = C++ 1Zでの作業私は次のコードすることを見出した:-std=c++1z
でg++-7
でコンパイルされたときテンプレートテンプレート部分特化のみG ++
#include <iostream>
#include <vector>
template <typename T>
struct X : std::false_type {};
template <template <typename> class Y, typename U>
struct X<Y<U>> : std::true_type {};
int main() {
if (X<int>())
std::cout << "wrong\n";
if (X<std::vector<double>>())
std::cout << "correct\n";
return 0;
}
のみcorrect
を印刷します。他のバージョンのg++
,clang++
または他のstd
フラグは正しく生成されません。
これは現在の実装のバグですか?このコードは何も印刷しないか、C++で何か変更されていますので、このコードは期待通りに動作しますか?
おもしろいことに、 'Y'は可変個の引数をとると' -std = C++ 1z'のclangに 'correct'と' -std = C++ 17のgccのためには何も表示されません':) – Rakete1111
' g ++ - 7'で 'correct'を表示しています。 – Svalorzen