On Wed, 5 May 2021 at 22:06, Mike via Std-Proposals <std-proposals@lists.isocpp.org> 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 https://godbolt.org/z/c67Tzj4oc :

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.