// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <iostream>
struct alternative_fact_t {} alternative_fact;
struct fact_about_gaston
{
fact_about_gaston(const char* verb) : verb(verb) {}
fact_about_gaston(const char* verb, const char* extra) : verb(verb), extra(extra) {}
fact_about_gaston(alternative_fact_t, const char* extra, const char* verb) : verb(verb), extra(extra), alt(true) {}
const char* verb, * extra = "";
bool alt = false;
};
template<size_t N>
void proclaim(fact_about_gaston(& facts)[N])
{
for (auto [verb, extra, alt] : facts)
if (alt)
std::cout << extra << " nobody" << verb << " Gaston\n";
else
std::cout << "No one" << verb << " Gaston" << extra << "\n";
}
int main()
{
fact_about_gaston facts[] = {
{" says \"no\" to", "!"},
"'s slick as",
"'s quick as",
{"'s neck's as incredibly thick as", "'s"},
"'s been like",
"'s got a swell cleft in his chin like",
" fights like",
{alternative_fact, "In a wrestling match", " bites like"},
" hits like",
{alternative_fact, "In a spitting match", " spits like"},
" shoots like",
};
proclaim(facts);
}