C++17の以下のコードについて質問です。

#include <iostream>

template <typename F>
auto func(F f)
{
    constexpr auto x = f();
    return x;
}

int main()
{
    auto x = func( [](){ return "abc"; } );
    std::cout << x << std::endl;
}

 このコードがg++7.2.0およびclang5.0.0、-std=c++1z -Wall -Wextra -pedanticで警告なくコンパイルが通ったのですが、ラムダ式を渡してfuncの引数からconstexpr変数を定義できていることについて、C++17の規格上、不適格や未定義動作等になっているかいないかどうかをご教示いただきたく存じます。
 よろしくお願いします。