constexpr lambda /'x'没有命名类型;你的意思是'x'?

时间:2016-11-02 07:06:50

标签: c++ gcc c++17

我正在尝试使用C ++ 17的constexpr lambdas来获取编译时字符串:

#include <utility>

template <char...>
struct str
{
  constexpr auto operator==(const str&) const { return true; }
  void foo() const;
};

template <typename S, std::size_t... Ns>
constexpr auto make_str(S s, std::index_sequence<Ns...>)
{
  return str<s()[Ns]...>{};
}

#define LIT(s) \
  make_str([]() { return s; }, std::make_index_sequence<sizeof(s) - 1>{})

constexpr auto x = LIT("hansi");
constexpr auto y = x;
static_assert(x == y);

到目前为止看起来不错。但后来我尝试调用成员函数:

x.foo();

使用trunk中的当前gcc(g ++(GCC)7.0.0 20161102),我收到以下错误消息:

c.cpp:19:1: error: ‘x’ does not name a type; did you mean ‘x’?
 x.foo();

请参阅https://godbolt.org/g/uN25e1了解演示

由于我甚至没有尝试使用x作为一种类型,这让我觉得很奇怪。

这是编译器错误吗?或者x真的很奇怪吗?

0 个答案:

没有答案