#include <stdio.h>
#include <string>
#include <vector>

struct struct_for_copying {
  struct_for_copying(int in_int, double in_double, const char *in_string)
      : int_value(in_int), double_value(in_double), string_value(in_string) {}
  struct_for_copying() { struct_for_copying(0, 0, ""); }

  int int_value;
  double double_value;
  std::string string_value;
};

int main(int argc, char **argv) {
  struct_for_copying input_struct(150 * argc, 10.0 * argc, argv[0]);
  struct_for_copying output_struct;
  int some_int = 44;
  double some_double = 34.5;
  double other_double;
  size_t vector_size;
  std::vector<struct_for_copying> my_vector;

  printf("Here is some code to stop at originally.  Got: %d, %p.\n", argc,
         argv);
  output_struct = input_struct;
  other_double = (some_double * some_int) / ((double)argc);
  other_double = other_double > 0
                     ? some_double / other_double
                     : some_double > 0 ? other_double / some_double : 10.0;
  my_vector.push_back(input_struct);
  vector_size = my_vector.size();

  return vector_size == 0 ? 0 : 1;
}
