#include <iostream>
#include <string>
#define TEXTIFY(s) (s)
int main()
{
std::string text1 = R"(begin
a,
b,
c
end)";
std::cout << "text1[BGN]" << std::endl;
std::cout << text1 << std::endl;
std::cout << "text1[END]" << std::endl;
// 通常の文字列リテラルで同じ内容を表現
std::string text2 = "begin\na,\nb,\nc\nend";
std::cout << std::boolalpha << "equality 1 2: " << (text1 == text2) << std::endl;
// プリプロセッサを通す場合(1)
std::string text3 = TEXTIFY(text1);
std::cout << std::boolalpha << "equality 2 3: " << (text2 == text3) << std::endl;
// プリプロセッサを通す場合(2)
std::string text4 = TEXTIFY(R"(begin
a,
b,
c
end)");
std::cout << std::boolalpha << "equality 2 4: " << (text2 == text4) << std::endl;
// プリプロセッサを通す場合(3)
// マクロ定義が複数行に渡る場合、本来は \ で行継続せねばならないが、RAW stringの行継続は特別視
#define TEXT_DEFINITION R"(begin
a,
b,
c
end)"
std::string text5 = TEXT_DEFINITION;
std::cout << text5 << std::endl;
std::cout << std::boolalpha << "equality 2 5: " << (text2 == text5) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKI2RlZmluZSBURVhUSUZZKHMpCQkocykKCmludCBtYWluKCkKewoJc3RkOjpzdHJpbmcgdGV4dDEgPSBSIihiZWdpbgphLApiLApjCmVuZCkiOwoJc3RkOjpjb3V0IDw8ICJ0ZXh0MVtCR05dIiA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgdGV4dDEgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8ICJ0ZXh0MVtFTkRdIiA8PCBzdGQ6OmVuZGw7CgogICAgLy8g6YCa5bi444Gu5paH5a2X5YiX44Oq44OG44Op44Or44Gn5ZCM44GY5YaF5a6544KS6KGo54++CglzdGQ6OnN0cmluZyB0ZXh0MiA9ICJiZWdpblxuYSxcbmIsXG5jXG5lbmQiOwoJc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8ICJlcXVhbGl0eSAxIDI6ICIgPDwgKHRleHQxID09IHRleHQyKSA8PCBzdGQ6OmVuZGw7CgoJLy8g44OX44Oq44OX44Ot44K744OD44K144KS6YCa44GZ5aC05ZCIKDEpCglzdGQ6OnN0cmluZyB0ZXh0MyA9IFRFWFRJRlkodGV4dDEpOwoJc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8ICJlcXVhbGl0eSAyIDM6ICIgPDwgKHRleHQyID09IHRleHQzKSA8PCBzdGQ6OmVuZGw7CgoJLy8g44OX44Oq44OX44Ot44K744OD44K144KS6YCa44GZ5aC05ZCIKDIpCglzdGQ6OnN0cmluZyB0ZXh0NCA9IFRFWFRJRlkoUiIoYmVnaW4KYSwKYiwKYwplbmQpIik7CglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgImVxdWFsaXR5IDIgNDogIiA8PCAodGV4dDIgPT0gdGV4dDQpIDw8IHN0ZDo6ZW5kbDsKCgkvLyDjg5fjg6rjg5fjg63jgrvjg4PjgrXjgpLpgJrjgZnloLTlkIgoMykKCS8vIOODnuOCr+ODreWumue+qeOBjOikh+aVsOihjOOBq+a4oeOCi+WgtOWQiOOAgeacrOadpeOBryBcIOOBp+ihjOe2mee2muOBm+OBreOBsOOBquOCieOBquOBhOOBjOOAgVJBVyBzdHJpbmfjga7ooYzntpnntprjga/nibnliKXoppYgCiNkZWZpbmUgVEVYVF9ERUZJTklUSU9OICAgICBSIihiZWdpbgphLApiLApjCmVuZCkiCglzdGQ6OnN0cmluZyB0ZXh0NSA9IFRFWFRfREVGSU5JVElPTjsKCXN0ZDo6Y291dCA8PCB0ZXh0NSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgImVxdWFsaXR5IDIgNTogIiA8PCAodGV4dDIgPT0gdGV4dDUpIDw8IHN0ZDo6ZW5kbDsKfQo=