On Wednesday, 6 May 2020 at 09:19:10 UTC, drug wrote:
06.05.2020 12:07, wjoe пишет:
Hello,
I'm choking on a piece of C++ I have no idea about how to
translate to D.
template <typename T,
typename std::enable_if< std::is_const<T>::value ==
true, void>::type* = nullptr>
constexpr const char *modifier() const {
return "[in] ";
}
template <typename T,
typename std::enable_if< std::is_reference<T>::value
== true, void>::type* = nullptr>
constexpr const char *modifier() const {
return "[out] ";
}
my attempt at it is like this:
template modifier(T) {
static if (is (T==const)) {
const char* modifier = "[in] ";
} else static if (/* T is a reference ?*/) { // [*]
const char* modifier = "[out] ";
}
}
but even if I could e.g. say something like
is(T == ref R, R),
auto a = modifier!(ref T);
wouldn't work.
did you try https://dlang.org/spec/traits.html#isRef?
yes, I did read the spec. I read the language spec on traits as
well as std.traits docs as well as searching the internet for a
solution since day before yesterday. But I couldn't bring it
together because
} else static if (__traits(isRef, T)) {
compiles, but e.g.
assert (modifier!(ref int) == "[out] ");
doesn't.
Anyways, thanks for your reply.