fix from_json implementation for pair/tuple
Introduced by 6e4910d5c5638bedbc3ff650d1b6b91249a927a3

Fixes #707
{"label": "nlohmann:develop", "ref": "develop", "sha": "e45eaf6e3085fd5e51907cff1b93d747620ffc00"}
I just realized that I introduced a bug in the develop branch.

The tests pass, because I forgot to add a test that retrieves a `pair` and a `tuple`...
That's really shameful, but luckily we haven't released yet.

```cpp
// no need for variadic here by the way
template<typename BasicJsonType, typename... Args>
void from_json(const BasicJsonType& j, std::pair<Args...>& p)
{
    // broken, must use at().get<>()
    p = {j.at(0), j.at(1)};
}

template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence<Idx...>)
{
    // same thing here
    t = std::make_tuple(j.at(Idx)...);
}
```
broken from_json implementation for pair and tuple 
diff --git a/src/json.hpp b/src/json.hpp
index 83c9ef2e5c..ef55a93cea 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -1235,16 +1235,16 @@ void from_json(const BasicJsonType& j, ArithmeticType& val)
     }
 }
 
-template<typename BasicJsonType, typename... Args>
-void from_json(const BasicJsonType& j, std::pair<Args...>& p)
+template<typename BasicJsonType, typename A1, typename A2>
+void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
 {
-    p = {j.at(0), j.at(1)};
+    p = {j.at(0).template get<A1>(), j.at(1).template get<A2>()};
 }
 
 template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
 void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence<Idx...>)
 {
-    t = std::make_tuple(j.at(Idx)...);
+    t = std::make_tuple(j.at(Idx).template get<typename std::tuple_element<Idx, Tuple>::type>()...);
 }
 
 template<typename BasicJsonType, typename... Args>

diff --git a/test/src/unit-constructor1.cpp b/test/src/unit-constructor1.cpp
index da10ed2e11..10b5216dd8 100644
--- a/test/src/unit-constructor1.cpp
+++ b/test/src/unit-constructor1.cpp
@@ -246,6 +246,7 @@ TEST_CASE("constructors")
             json j(p);
 
             CHECK(j.type() == json::value_t::array);
+            CHECK(j.get<decltype(p)>() == p);
             REQUIRE(j.size() == 2);
             CHECK(j[0] == std::get<0>(p));
             CHECK(j[1] == std::get<1>(p));
@@ -262,11 +263,12 @@ TEST_CASE("constructors")
 
         SECTION("std::tuple")
         {
-            const auto t = std::make_tuple(1.0, "string", 42, std::vector<int> {0, 1});
+            const auto t = std::make_tuple(1.0, std::string{"string"}, 42, std::vector<int> {0, 1});
             json j(t);
 
             CHECK(j.type() == json::value_t::array);
             REQUIRE(j.size() == 4);
+            CHECK(j.get<decltype(t)>() == t);
             CHECK(j[0] == std::get<0>(t));
             CHECK(j[1] == std::get<1>(t));
             CHECK(j[2] == std::get<2>(t));

{"json_unit_default": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "json_unit_all": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"json_unit_default": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "json_unit_all": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"passed_count": 2, "failed_count": 0, "skipped_count": 0, "passed_tests": ["json_unit_default", "json_unit_all"], "failed_tests": [], "skipped_tests": []}
{"passed_count": 0, "failed_count": 0, "skipped_count": 0, "passed_tests": [], "failed_tests": [], "skipped_tests": []}
{"passed_count": 2, "failed_count": 0, "skipped_count": 0, "passed_tests": ["json_unit_default", "json_unit_all"], "failed_tests": [], "skipped_tests": []}