C++ ドラフトでは、
非型テンプレート パラメータは、次の型 (オプションで cv 修飾された) の 1 つを持つものとします: — 整数型または列挙型 — オブジェクトへのポインタまたは関数へのポインタ— オブジェクトへの左辺値参照または関数への左辺値参照メンバー, — std::nullptr_t.
次のコードでは、メンバーへのポインターがパラメーターとしてテンプレートに渡されます
using namespace std;
class MyClass
{
public:
int membervar;
};
template< int (MyClass::*var) > struct A
{
// What am I supposed to do with *var? There isn't an object instance to use it!
};
int main(int argc, char *argv[])
{
struct A <&MyClass::membervar> object;
}
上記のコードはエラーなしでコンパイルされます (MSVC2012)
問題は、そのようなポインターをどうするべきかわかりません。それを使用するオブジェクト インスタンスがありません。