2016-11-28 22 views
4

を機能させるには、私は概念技術仕様から変更されたコードのこの小片みました:C++の概念:無効な参照概念

template < typename T > 
    concept bool C_Object() { 
     return requires { 
     T(); 
     }; 
    } 

    template < typename Object > 
    requires C_Object<Object> 
    class Foo { 
    public: 
     Object test; 
    }; 

struct Component { 
    int data; 
    Component() : data(0) {} 
}; 

int main() { 
    Foo<Component> test; 
    return 0; 
} 

をしかし、私はこのエラーを取得する:

test.cpp:10:12: error: invalid reference to function concept ‘template<class T> concept bool C_Object()’ 
    requires C_Object<Object> 
      ^~~~~~~~~~~~~~~~ 
test.cpp: In function ‘int main()’: 
test.cpp:26:16: error: template constraint failure 
    Foo<Component> test; 
       ^
test.cpp:26:16: note: constraints not satisfied 
test.cpp:26:16: note: ill-formed constraint 

まず時間をI私が行方不明のC++コンセプトの新しいバージョンを試してみてください。

おかげ

は、この定義素晴らしい一日

答えて

4

を持っている:

template < typename T > 
concept bool C_Object() { 
    return requires { 
    T(); 
    }; 
} 

は、機能概念としてC_Object定義します。この1つ:

template < typename Object > 
requires C_Object<Object> 
class Foo { 
public: 
    Object test; 
}; 

は、可変概念であるかのようにC_Objectを使用します。句を必要とし、あなたは機能の概念を「起動」する()を使用しなければならないで:

template < typename Object > 
requires C_Object<Object>() 
class Foo { 
public: 
    Object test; 
}; 

代わりに、変数と関数の概念を区別しませんObjectを拘束するために、「簡潔な」プレースホルダの構文を使用することができます。

template < C_Object Object > 
class Foo { 
public: 
    Object test; 
}; 
+0

あなたの最後のコードは、私が探していたものでした。 –