Feature/length perimeter result

Change the length and perimeter return type to `default_length_result<...>::type`