diff options
Diffstat (limited to 'libmhello/libmhello/hello.mxx')
-rw-r--r-- | libmhello/libmhello/hello.mxx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libmhello/libmhello/hello.mxx b/libmhello/libmhello/hello.mxx new file mode 100644 index 0000000..c9ed8e1 --- /dev/null +++ b/libmhello/libmhello/hello.mxx @@ -0,0 +1,52 @@ +// file: libmhello/hello.mxx -*- C++ -*- + +export module hello; + +import std.core; + +#ifndef __clang__ +export +#endif +import format; + +export namespace hello +{ + // If you compare this interface to version 1.0, then you will notice that + // while it is API/source-compatible (the call via the old signature of + // say() is still valid) it is not ABI/binary-compatible (say() now has an + // extra argument and is inline). + // + // Notice also that inline say() now uses a type and calls a function from + // format which means libmformat is an "interface dependency" of libmhello. + // + // Note that for the default argument (and thus source-compatibility) to + // work as expected we have to re-export the format module. Failed that, + // users of our API that don't care about the volume will still have to + // explicitly import format which would be a strange requirement indeed. + + __symexport void + say_formatted (const std::string& message); + +#ifndef _MSC_VER + inline void + say (const std::string& name, format::volume v = format::volume::normal) + { + say_formatted (format::message ("Hello", name, v)); + } +#else + // - modulewriter.cpp:4730: sorry: not yet implemented + // - also, now need to symexport inline functions for some reason + + __symexport inline void + say (const std::string& name) + { + say_formatted (format::message ("Hello", name, format::volume::normal)); + } + + __symexport inline void + say (const std::string& name, format::volume v) + { + say_formatted (format::message ("Hello", name, v)); + } +#endif +} |