LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

А лучше даже так:

template <typename ... Traits>
void traitsToString(const State& voxel, std::string& result, Traits&& ... traits) {
    auto impl = [&]<typename T>(T && trait) {
        if constexpr (requires { result += trait.toString(voxel); }) {
            result += trait.toString(voxel);
        }
    };
    (impl(traits), ...);
}

если toString больше нигде не нужно будет делать.

Исходная версия Siborgium, :

А лучше даже так:

template <typename ... Traits>
void traitsToString(const State& voxel, std::string& result, Traits&& ... traits) {
    auto impl = [&]<typename T>(T && trait) {
        if constexpr (requires (T trait){ result += trait.toString(voxel); }) {
            result += trait.toString(voxel);
        }
    };
    (impl(traits), ...);
}

если toString больше нигде не нужно будет делать.