4

新しい c++17 クラス テンプレート推定を使用しようとしていますが、const を適用するまではすべて正常に動作しているようです。これは私が直面している問題の小さな例です:

#include <type_traits>

template <typename T>
struct X
{
    T _data;

    X(void) = default;
    X(T && data) : _data{ data } {}

    constexpr bool const_x(void) { return false; }
    constexpr bool const_x(void) const { return true; }
};

template <typename T>
X(T &&) -> X<std::remove_reference_t<T>>;

int main(void)
{
    X<int> a;
    const X<int> b{};

    X c{ 10 };
    const X d{ 10 };

    static_assert(!a.const_x());
    static_assert(b.const_x());

    static_assert(!c.const_x());
    static_assert(d.const_x()); // assert fails
}

const X がその型を推測しているとき、const-ness は実行されないようです。私はこれが可能であることを知っています:

template <typename T>
X(T &&) -> const X<std::remove_reference_t<X>>;

ただし、これにより、すべての推定型が const X になります。

誰かが情報や助けを持っているなら、それは大歓迎です!

編集 私はGCC-7.1.0を使用しています

4

1 に答える 1