Fix casting of time points with non-system-clock duration with VS (#1748)

* Fix casting of time points with non-system-clock duration on Windows

Add explicit `time_point_cast` to time point with duration of system
clock. Fixes Visual Studio compile error.

* Add test case for custom time points casting
diff --git a/tests/test_chrono.cpp b/tests/test_chrono.cpp
index 195a93b..899d08d 100644
--- a/tests/test_chrono.cpp
+++ b/tests/test_chrono.cpp
@@ -14,6 +14,10 @@
 TEST_SUBMODULE(chrono, m) {
     using system_time = std::chrono::system_clock::time_point;
     using steady_time = std::chrono::steady_clock::time_point;
+
+    using timespan = std::chrono::duration<int64_t, std::nano>;
+    using timestamp = std::chrono::time_point<std::chrono::system_clock, timespan>;
+
     // test_chrono_system_clock
     // Return the current time off the wall clock
     m.def("test_chrono1", []() { return std::chrono::system_clock::now(); });
@@ -44,4 +48,8 @@
     // Float durations (issue #719)
     m.def("test_chrono_float_diff", [](std::chrono::duration<float> a, std::chrono::duration<float> b) {
         return a - b; });
+
+    m.def("test_nano_timepoint", [](timestamp start, timespan delta) -> timestamp {
+        return start + delta;
+    });
 }
diff --git a/tests/test_chrono.py b/tests/test_chrono.py
index 2b75bd1..f308de9 100644
--- a/tests/test_chrono.py
+++ b/tests/test_chrono.py
@@ -99,3 +99,9 @@
     diff = m.test_chrono_float_diff(43.789012, 1.123456)
     assert diff.seconds == 42
     assert 665556 <= diff.microseconds <= 665557
+
+
+def test_nano_timepoint():
+    time = datetime.datetime.now()
+    time1 = m.test_nano_timepoint(time, datetime.timedelta(seconds=60))
+    assert(time1 == time + datetime.timedelta(seconds=60))