a.hpp
में मैं परिभाषित:सी ++ आश्रित नाम: क्या इस टाइपनाम की आवश्यकता है?
#include <utility>
namespace Board {
template<int W, int H>
struct GroupNode
{
using PointType = std::pair<int, int>;
// ...
};
}
फिर, b.cpp
में मैं परिभाषित:
#include "a.hpp"
namespace Board {
template<int W, int H>
struct NodeList
{
using StdList = std::list < /* typename */ GroupNode<W, H>>;
}
}
// and then use NodeList<19, 19> nl;
ऊपर कोड दोनों जीसीसी -6 और बजना-3.9 किसी चेतावनी के बिना पर संकलित किया जा सकता है। हालांकि, क्लियन 2016.3 ने b.cpp
में cannot resolve variable GroupNode
की शिकायत की। typename
अनमोलमेंटिंग क्लियन चेतावनी को रोक सकती है, लेकिन मैं सोच रहा था कि यह typename
आवश्यक है? यदि हां, तो क्यों g ++/clang ++ ने कोई चेतावनी नहीं दी?