どうすれば…どのようにコンパイルエラーを解決するか/テンプレートパラメータのシャドーイング

[ad_1]

ごあいさつ よろしく
以下のルーチンはコンパイルされず、エラー メッセージが表示されます。 私は主に最初のルーチンに興味があります assert_Search_results このエラーは、テンプレート パラメーターがシャドウされていることを示しています。 その意味がわかりません。 私はあなたの親切な援助を求めています。 よろしく

C++
import std.core;
using namespace std;

#define LINE_FUNCSIG cout << __LINE__ << ' ' << __FUNCSIG__ << endl;

namespace TREE
{
	template<typename treeType, template<typename> typename keyReferenceWrapper, template<typename> typename valueReferenceWrapper>
	struct key_x_value {};
}

template<typename T>
struct non_reference_wrapper {};

struct cContiguousIntervalTree
{
	using this_tree_type = cContiguousIntervalTree;

	template<typename T>
	using key_reference_wrapper = non_reference_wrapper<T>;

	template<template<typename> typename valueReferenceWrapper>
	using key_x_value_template = TREE::key_x_value<this_tree_type, key_reference_wrapper, valueReferenceWrapper>;

	template<template<typename> typename referenceWrapper>
	using intersecting_x_datum_template = key_x_value_template<referenceWrapper>;
};

// does not compile
// error C2947 : expecting '>' to terminate template - argument - list, found '<'
// error C7576 : declaration of 'referenceWrapper' shadows a template parameter
// error C2988 : unrecognizable template declaration / definition
// error C2143 : syntax error : missing ')' before '>'
// error C2059 : syntax error : '>'
// error C2059 : syntax error : ')'
// Done building project "hello_world.vcxproj" --FAILED.
template<typename treeType, template<typename> class referenceWrapper>
void assert_Search_result(const vector<typename treeType::intersecting_x_datum_template<referenceWrapper>>);

// does not compile
// error C2988 : unrecognizable template declaration / definition
// error C2143 : syntax error : missing ')' before '<'
// error C2143 : syntax error : missing ';' before '<'
// error C2059 : syntax error : '<'
// error C2059 : syntax error : ')'
// Done building project "hello_world.vcxproj" --FAILED.
template<typename T, typename U>
void foo(typename T::key_reference_wrapper);

// much to my amazement compiles
template<typename T, typename U>
void goo(typename T::U); 

私が試したこと:

re /依存型の下のcppreferenceページリンクを調べました。 役に立ちませんでした。 エラー C7576 に関する以下の Microsoft ページ リンクを調べました。 役に立ちませんでした。 Web で「テンプレート シャドウ」を検索しました。 何も見つかりませんでした。 上記のコードを調べて、これらすべてに下線が引かれている理由を判断してください。 役に立ちませんでした。
従属名 – cppreference.com[ ^ ]
コンパイラ エラー C7500 ~ C7999 | マイクロソフト ラーン[ ^ ]

解決策 1

これは同じ質問です テンプレートパラメータのコンパイルエラーの再/シャドウを解決する方法[^]. 再投稿しないでください。

[ad_2]

Source link

コメント

タイトルとURLをコピーしました