const char *Cmp_Description(void) {
  return "The `Cmp` class is used to define comparison between two object "
         "values. "
         "This class is important as it is used by many data structures to "
         "test "
         "equality or ordering of objects."
         "\n\n"
         "By default, if passed two objects of the same type, the `Cmp` class "
         "will "
         "simply compare the raw memory of both objects, using the `Size` "
         "class."
         "\n\n"
         "To implement this class a `cmp` function must be provided which "
         "returns "
         "`< 0` if the first object is _less than_ the second, `> 0` if the "
         "first "
         "object is _greater than_ the second, and `0` if they are _equal_. "
         "\n\n"
         "For objects that manage their own data this class may need to be "
         "overridden to ensure that objects of the same _value_ are still "
         "treated "
         "as equal. E.G. for string types."
         "\n\n"
         "This class to used to test for _value_ equality between objects, "
         "I.E. if "
         "they represent the same thing. For _object_ equality the `is` "
         "keyword can "
         "be used, which will return `true` only if two variables are pointing "
         "to "
         "the same object in memory.";
}


x86 assembly (clang, -O0):
<Cmp_Description>:
push   %rbp
mov    %rsp,%rbp
lea    0xef5(%rip),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<Cmp_Description>:
lea    0xef9(%rip),%rax
ret

LLVM IR (-O0):
@.str = [950 x i8] c"The `Cmp` class is used to define comparison between two object values. This class is important as it is used by many data structures to test equality or ordering of objects.\0A\0ABy default, if passed two objects of the same type, the `Cmp` class will simply compare the raw memory of both objects, using the `Size` class.\0A\0ATo implement this class a `cmp` function must be provided which returns `< 0` if the first object is _less than_ the second, `> 0` if the first object is _greater than_ the second, and `0` if they are _equal_. \0A\0AFor objects that manage their own data this class may need to be overridden to ensure that objects of the same _value_ are still treated as equal. E.G. for string types.\0A\0AThis class to used to test for _value_ equality between objects, I.E. if they represent the same thing. For _object_ equality the `is` keyword can be used, which will return `true` only if two variables are pointing to the same object in memory.\00"
define i8* @Cmp_Description() {
ret i8* getelementptr inbounds ([950 x i8], [950 x i8]* @.str, i64 0, i64 0)
}

LLVM IR (-O2):
@.str = [950 x i8] c"The `Cmp` class is used to define comparison between two object values. This class is important as it is used by many data structures to test equality or ordering of objects.\0A\0ABy default, if passed two objects of the same type, the `Cmp` class will simply compare the raw memory of both objects, using the `Size` class.\0A\0ATo implement this class a `cmp` function must be provided which returns `< 0` if the first object is _less than_ the second, `> 0` if the first object is _greater than_ the second, and `0` if they are _equal_. \0A\0AFor objects that manage their own data this class may need to be overridden to ensure that objects of the same _value_ are still treated as equal. E.G. for string types.\0A\0AThis class to used to test for _value_ equality between objects, I.E. if they represent the same thing. For _object_ equality the `is` keyword can be used, which will return `true` only if two variables are pointing to the same object in memory.\00"
define i8* @Cmp_Description() {
ret i8* getelementptr inbounds ([950 x i8], [950 x i8]* @.str, i64 0, i64 0)
}