There is no proposal yet but we are working on getting implementation experience. Partial support for compile-time formatting has been recently added to the fmt library:

- Victor

On Wed, May 5, 2021 at 3:26 PM Edward Catmur via Std-Proposals <> wrote:
On Wed, 5 May 2021 at 22:06, Mike via Std-Proposals <> wrote:
How do we "allow compile-time string processing"?

By making std::format constexpr:

template<class... Args>
constexpr std::string format(std::string_view fmt, const Args&... args);

Note that std::string is already constexpr since C++20.

So, taking my specific problem, given `loc` returned by
source_location::current(), how do we use loc.file_name() (returning
constexpr const char*) and loc.line() (returning constexpr
unint_least32_t) to create a single compile time string like
"foo.cpp(555): beyond all recognition"?  Could you give me an example of
the kind of syntax you were thinking of?

constexpr auto locf = std::format("{}({}): ", loc.file_name(), loc.line());

Currently the problem is that a constexpr allocation can't escape constexpr evaluation (as Jason mentions above re. "non-transient allocations"), so you'll have to do something silly like :

constexpr auto locff = [&] { return std::format("{}({}): ", loc.file_name(), loc.line()); };
constexpr auto locf = static_string<locff().size()>(locff().c_str());

On the other hand, if your source filenames are reasonably short you might be able to get away with using the SSO buffer. For a while, anyway.

Are there already proposals for this kind of compile time string
composition from constexpr expressions?

I'm not aware of any. P2216 is focussing on (compile time) safety, mainly.
Std-Proposals mailing list