diff --git a/benchmarks/filesystem.bench.cpp b/benchmarks/filesystem.bench.cpp
index 8dacbe6..2cea3f6 100644
--- a/benchmarks/filesystem.bench.cpp
+++ b/benchmarks/filesystem.bench.cpp
@@ -21,11 +21,27 @@
     benchmark::DoNotOptimize(P.native().data());
   }
 }
-BENCHMARK_CAPTURE(BM_PathConstructString, iterate_elements,
+BENCHMARK_CAPTURE(BM_PathConstructString, large_string,
   getRandomStringInputs)->Arg(TestNumInputs);
 
 
 template <class GenInputs>
+void BM_PathConstructCStr(benchmark::State &st, GenInputs gen) {
+  using namespace fs;
+  const auto in = gen(st.range(0));
+  path PP;
+  for (auto& Part : in)
+    PP /= Part;
+  benchmark::DoNotOptimize(PP.native().data());
+  while (st.KeepRunning()) {
+    const path P(PP.native().c_str());
+    benchmark::DoNotOptimize(P.native().data());
+  }
+}
+BENCHMARK_CAPTURE(BM_PathConstructCStr, large_string,
+  getRandomStringInputs)->Arg(TestNumInputs);
+
+template <class GenInputs>
 void BM_PathIterateMultipleTimes(benchmark::State &st, GenInputs gen) {
   using namespace fs;
   const auto in = gen(st.range(0));
@@ -85,6 +101,4 @@
 BENCHMARK_CAPTURE(BM_PathIterateOnceBackwards, iterate_elements,
   getRandomStringInputs)->Arg(TestNumInputs);
 
-
-
 BENCHMARK_MAIN()
diff --git a/include/experimental/filesystem b/include/experimental/filesystem
index 1a8dee9..c674a03 100644
--- a/include/experimental/filesystem
+++ b/include/experimental/filesystem
@@ -623,10 +623,10 @@
 
 template <>
 struct _PathCVT<char> {
+
     template <class _Iter>
     static void __append_range(string& __dest, _Iter __b, _Iter __e) {
-        for (; __b != __e; ++__b)
-            __dest.push_back(*__b);
+        __dest.append(__b, __e);
     }
 
     template <class _Iter>
@@ -640,7 +640,8 @@
     static void __append_source(string& __dest, _Source const& __s)
     {
         using _Traits = __is_pathable<_Source>;
-        __append_range(__dest, _Traits::__range_begin(__s), _Traits::__range_end(__s));
+        __append_range(__dest, _Traits::__range_begin(__s),
+                               _Traits::__range_end(__s));
     }
 };
 
diff --git a/src/experimental/filesystem/path.cpp b/src/experimental/filesystem/path.cpp
index be970a8..546f3c4 100644
--- a/src/experimental/filesystem/path.cpp
+++ b/src/experimental/filesystem/path.cpp
@@ -42,8 +42,7 @@
 public:
   PathParser(string_view_t P, string_view_t E, unsigned char S)
       : Path(P), RawEntry(E), State(static_cast<ParserState>(S)) {
-    assert(S != 0);
-    assert(S != PS_BeforeBegin);
+    // S cannot be '0' or PS_BeforeBegin.
   }
 
   static PathParser CreateBegin(string_view_t P) noexcept {
@@ -94,7 +93,6 @@
 
     case PS_InFilenames: {
       PosPtr SepEnd = consumeSeparator(Start, End);
-      assert(SepEnd);
       if (SepEnd != End) {
         PosPtr TkEnd = consumeName(SepEnd, End);
         if (TkEnd)
@@ -131,7 +129,6 @@
                          SepEnd + 1, RStart + 1);
       } else {
         PosPtr TkStart = consumeName(RStart, REnd);
-        assert(TkStart);
         if (TkStart == REnd + 2 && consumeSeparator(TkStart, REnd) == REnd)
           return makeState(PS_InRootName, Path.data(), RStart + 1);
         else
@@ -192,14 +189,10 @@
 
 private:
   void makeState(ParserState NewState, PosPtr Start, PosPtr End) noexcept {
-    assert(NewState != PS_BeforeBegin && NewState != PS_AtEnd);
     State = NewState;
-    assert(Start < End);
-    assert(Start >= &Path.front() && End <= &Path.back() + 1);
     RawEntry = string_view_t(Start, End - Start);
   }
   void makeState(ParserState NewState) noexcept {
-    assert(NewState == PS_BeforeBegin || NewState == PS_AtEnd);
     State = NewState;
     RawEntry = {};
   }
