この宣言は問題ありません:
void memberFunction(T& functor, double value)noexcept(noexcept(functor(value)));
のために
template<class T>
class MyClass{
public:
void memberFunction(T& functor, double value)noexcept(noexcept(functor(value)));
};
MyClass に functor データ メンバーがあるとします。
template<class T>
class MyClass{
public:
//ctor
...
void memberFunction(double value);
private:
T functor;
};
前のケースと同じように noexcept 仕様を書きたいので、これを試しました。
void memberFunction(double value)noexcept(noexcept(functor(value)));
しかし、コンパイラは、ファンクターがスコープではないことを教えてくれます。以下は、同様の理由で機能しません。
void memberFunction(double value)noexcept(noexcept(this->functor(value)));
また、デフォルトのコンストラクターがない T として使用されるクラスがいくつかあるため、以下は機能しません。
void memberFunction(double value)noexcept(noexcept(T()(value)));
以下は構文的に間違っています。
void memberFunction(double value)noexcept(noexcept(T::operator(double)));
それは私が欲しいものを絵でよく説明していますが。
なにか提案を?とりあえず仕様は諦めました…