История изменений
Исправление quasimoto, (текущая версия) :
#include <cstdio>
#include <ftl/lazy.h>
void f(ftl::lazy<int> a, ftl::lazy<int> b) {
if (*a > 0) printf("a = %d\n", *a);
else if (*a > -1 && *b > 0) printf("a = %d, b = %d\n", *a, *b);
}
int main() {
{
auto a = ftl::defer([]() { puts("compute a"); return 1; });
auto b = ftl::defer([]() { puts("compute b"); return 2; });
f(a, b);
}
{
auto a = ftl::defer([]() { puts("compute a"); return 0; });
auto b = ftl::defer([]() { puts("compute b"); return 1; });
f(a, b);
}
}
/*
compute a
a = 1
compute a
compute b
a = 0, b = 1
*/
Исходная версия quasimoto, :
#include <cstdio>
#include <ftl/lazy.h>
void f(ftl::lazy<int> a, ftl::lazy<int> b) {
if (*a > 0) printf("a = %d\n", *a);
else if (*a > -1 && *b > 0 ) printf("a = %d, b = %d\n", *a, *b);
}
int main() {
{
auto a = ftl::defer([]() { puts("compute a"); return 1; });
auto b = ftl::defer([]() { puts("compute b"); return 2; });
f(a, b);
}
{
auto a = ftl::defer([]() { puts("compute a"); return 0; });
auto b = ftl::defer([]() { puts("compute b"); return 1; });
f(a, b);
}
}
/*
compute a
a = 1
compute a
compute b
a = 0, b = 1
*/