2

特定の型にライブラリの基礎 TS v2 type_traits' is_detected_exactヘルパーを使用した事前インクリメント演算子があるかどうかをコンパイル時に検出したい- ただし、このヘルパーを誤解しているか、間違ったパラメーターを指定したようです。次のコードは機能しません。コンパイル:

#include <experimental/type_traits>

template<typename T>
using operator_plusplus_t = decltype(&T::operator++);

template<typename T>
using has_pre_increment = std::experimental::is_detected_exact<T&, operator_plusplus_t, T>;

struct incrementer
{
  incrementer& operator++() { return *this; };
};

static_assert(has_pre_increment<incrementer>::value, "type does not have pre increment");

私が得るエラーはこれです(static_assertは失敗します):

<source>:14:15: error: static assertion failed: type does not have pre increment  
static_assert(has_pre_increment<incrementer>::value, "type does not have pre increment");
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Compiler returned: 1

https://godbolt.org/z/-zoUd9

「インクリメンター」構造体には、その型への参照を返す引数のない operator++ メソッドがあるため、このコードがコンパイルされることを期待していました...

多分あなたは私を正しい方向に向けることができます、前もって感謝します!

4

1 に答える 1

2

代わりに使用できますdecltype(++std::declval<T>())

https://godbolt.org/z/h_INw-

于 2018-11-09T13:54:37.550 に答える