--- /dev/null
+// Copyright (c) 2020 Antony Polukhin
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/core/lightweight_test.hpp>
+
+#include <boost/pfr/core.hpp>
+
+#include <string>
+#include <typeindex>
+#include <type_traits>
+
+namespace testing {
+
+namespace {
+
+struct other_anon {
+ int data;
+};
+
+struct anon {
+ other_anon a;
+ const other_anon b;
+};
+
+void test_in_anon_ns_const_field() {
+ anon x{{1}, {2}};
+
+ auto v = boost::pfr::structure_tie(x);
+ using v_type = decltype(v);
+ using expected_type = std::tuple<other_anon&, const other_anon&>;
+
+ // Use runtime check to make sure that Loophole fails to compile structure_tie
+ BOOST_TEST(typeid(expected_type) == typeid(v_type));
+}
+
+} // anonymous namespace
+
+void test_in_non_non_ns_const_field() {
+ anon x{{1}, {2}};
+
+ auto v = boost::pfr::structure_tie(x);
+ using v_type = decltype(v);
+ using expected_type = std::tuple<other_anon&, const other_anon&>;
+
+ // Use runtime check to make sure that Loophole fails to compile structure_tie
+ BOOST_TEST(typeid(expected_type) == typeid(v_type));
+}
+
+} // namespace testing
+
+int main() {
+ testing::test_in_anon_ns_const_field();
+ testing::test_in_non_non_ns_const_field();
+
+ return boost::report_errors();
+}
+
+