1
typedef void fv();
typedef std::add_const<fv>::type fvc;

typedef void fv_const() const;
static_assert(std::is_same<fvc,fv_const>::value,"Oops");

fvcfv_constが同じ型ではないため、これはコンパイルされません。

と等しいように型fvcを派生させることは可能ですか?fvfv_const

4

1 に答える 1

0

非メンバー関数のシグネチャに追加constすることはあまり意味がありませんが、次のように実行できます。

template<class T> struct add_f_const;
template<class R, class...Args>
struct add_f_const<R (Args...)> { typedef R type(Args...) const; };

static_assert(std::is_same<add_f_const<void()>::type, void() const>::value, "Oops");

constメンバー関数に追加するのがより一般的です:

template<class T> struct add_member_const;
template<class T, class R, class...Args>
struct add_member_const<R (T::*)(Args...)> { using type = R (T::*)(Args...) const; };

struct test {};
static_assert(std::is_same<add_member_const<void (test::*)()>::type,
  void (test::*)() const>::value,  "Oops");
于 2013-03-14T15:06:28.343 に答える