const char *Copy_Description(void) {
  return "The `Copy` class can be used to override the behaviour of an object "
         "when "
         "a copy is made of it. By default the `Copy` class allocates a new "
         "empty "
         "object of the same type and uses the `Assign` class to set the "
         "contents. The copy is then registered with the Garbage Collector as "
         "if it "
         "had been constructed with `new`. This means when using manual memory "
         "management a copy must be deleted manually."
         "\n\n"
         "If the `copy` class is overridden then the implementer may manually "
         "have "
         "to register the object with the Garbage Collector if they wish for "
         "it to "
         "be tracked."
         "\n\n"
         "By convention `copy` follows the semantics of `Assign`, which "
         "typically "
         "means a _deep copy_ should be made, and that an object will create a "
         "copy of all of the sub-objects it references or contains - although "
         "this "
         "could vary depending on the type's overridden behaviours.";
}


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

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

LLVM IR (-O0):
@.str = [827 x i8] c"The `Copy` class can be used to override the behaviour of an object when a copy is made of it. By default the `Copy` class allocates a new empty object of the same type and uses the `Assign` class to set the contents. The copy is then registered with the Garbage Collector as if it had been constructed with `new`. This means when using manual memory management a copy must be deleted manually.\0A\0AIf the `copy` class is overridden then the implementer may manually have to register the object with the Garbage Collector if they wish for it to be tracked.\0A\0ABy convention `copy` follows the semantics of `Assign`, which typically means a _deep copy_ should be made, and that an object will create a copy of all of the sub-objects it references or contains - although this could vary depending on the type's overridden behaviours.\00"
define i8* @Copy_Description() {
ret i8* getelementptr inbounds ([827 x i8], [827 x i8]* @.str, i64 0, i64 0)
}

LLVM IR (-O2):
@.str = [827 x i8] c"The `Copy` class can be used to override the behaviour of an object when a copy is made of it. By default the `Copy` class allocates a new empty object of the same type and uses the `Assign` class to set the contents. The copy is then registered with the Garbage Collector as if it had been constructed with `new`. This means when using manual memory management a copy must be deleted manually.\0A\0AIf the `copy` class is overridden then the implementer may manually have to register the object with the Garbage Collector if they wish for it to be tracked.\0A\0ABy convention `copy` follows the semantics of `Assign`, which typically means a _deep copy_ should be made, and that an object will create a copy of all of the sub-objects it references or contains - although this could vary depending on the type's overridden behaviours.\00"
define i8* @Copy_Description() {
ret i8* getelementptr inbounds ([827 x i8], [827 x i8]* @.str, i64 0, i64 0)
}