Sprout で長さの短い文字列型へ変換する

いつも忘れてしまうので覚書。
さて、Sprout.String では、長さの長い文字列型への型変換は暗黙的に行なってくれるのですが、長さの短い文字列型への変換は行えません。

constexpr sprout::string<16> homu = sprout::to_string("homu");

// error
// constexpr sprout::string<8> str1 = homu;

// ok
constexpr sprout::string<32> str1 = homu;
static_assert(str1 == "homu", "");


constexpr sprout::string<16> mado = sprout::to_string("mado");

// error
// constexpr sprout::string<16> str2 = homu + mado;

// ok
constexpr sprout::string<32> str2 = homu + mado;
static_assert(str2 == "homumado", "");


上記のように長さが短い文字列型へ変換したい場合は、sprout::shrink 関数を使用します。


[ソース]

#include <sprout/string.hpp>

int
main(){

    constexpr sprout::string<16> homu = sprout::to_string("homu");

    // ok
    constexpr sprout::string<8> str1 = sprout::shrink(homu);
    static_assert(str1 == "homu", "");


    constexpr sprout::string<16> mado = sprout::to_string("mado");

    // ok
    constexpr sprout::string<16> str2 = sprout::shrink(homu + mado);
    static_assert(str2 == "homumado", "");


    return 0;
}

[コンパイラ]

  • g++ (GCC) 4.8.0 20121104 (experimental)