diff --git a/lizard_languages/clike.py b/lizard_languages/clike.py
index 33e1c3d..2c1af01 100644
--- a/lizard_languages/clike.py
+++ b/lizard_languages/clike.py
@@ -155,7 +155,7 @@ class CLikeNestingStackStates(CodeStateMachine):
         if token == "template":
             self._state = self._template_declaration
 
-        elif token in ("struct", "class", "namespace"):
+        elif token in ("struct", "class", "namespace", "union"):
             self._state = self._read_namespace
 
         elif token == "{":

diff --git a/test/test_languages/testCAndCPP.py b/test/test_languages/testCAndCPP.py
index cd5569b..41a1b13 100644
--- a/test/test_languages/testCAndCPP.py
+++ b/test/test_languages/testCAndCPP.py
@@ -461,6 +461,11 @@ class Test_c_cpp_lizard(unittest.TestCase):
         self.assertEqual(1, len(result))
         self.assertEqual("A::foo", result[0].name)
 
+    def test_union_as_qualifier(self):
+        """Union as namespace for functions."""
+        result = get_cpp_function_list("union A { void foo() {} };")
+        self.assertEqual(1, len(result))
+        self.assertEqual("A::foo", result[0].name)
 
 class Test_cpp11_Attributes(unittest.TestCase):
     """C++11 extendable attributes can appear pretty much anywhere."""

Lizard not handling functions within unions correctly
For the following code:

```c++
namespace foo{
	
	void myFunction() { }
	
	union bar{
		void mySecondFunction() { }
	};
	
	class dog{
		void bark() { }
	};
};
```

Lizard generates the following output:
![doxunionbug](https://user-images.githubusercontent.com/29785071/27710254-b019601a-5ce4-11e7-9706-da253a28276e.png)

This shows that the long_name generated by lizard includes the namespace or the class that a function is contained in but does not contain the union the function is contained in. This inconsistency can cause issues for code analysis tools.
test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_union_as_qualifier
test/test_languages/testCAndCPP.py::Test_C_Token_extension::test_connecting_marcro test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_1 test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_braket_that_is_not_a_namespace test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_class_with_inheritance test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_complicated_c_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_constructor_initialization_list test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_constructor_initialization_list_noexcept test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_constructor_initializer_list test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_constructor_uniform_initialization test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_destructor_implementation test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_double_nested_template test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_double_slash_within_string test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_empty test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_dec_followed_with_one_word_is_ok test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_dec_with_noexcept test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_dec_with_throw test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_declaration_is_not_counted test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_name_class test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_operator test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_that_returns_function_pointers test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_with_1_param test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_with_content test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_with_no_param test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_with_param test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_with_strang_param test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_function_with_strang_param2 test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_global_var_constructor test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_inline_operator test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_less_then_is_not_template test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_namespace_alias test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_nested_class test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_nested_class_middle test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_nested_template test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_nested_template_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_nested_unnamed_namespace test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_no_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_non_function_initializer_list test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_non_function_uniform_initialization test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_not_old_style_c_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_old_style_c_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_old_style_c_function_has_semicolon test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_function_in_class test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_function_with_const test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_function_with_namespace test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_function_with_noexcept test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_function_with_throw test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_one_macro_in_class test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_only_word_can_be_function_name test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_operator_overloading test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_operator_overloading_shift test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_operator_overloading_with_namespace test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_operator_with_complicated_name test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_parentheses_before_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_pre_class test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_ref_qualifiers test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_struct_in_param test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_struct_in_return_type test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_stupid_macro_before_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_as_part_of_function_name test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_as_reference test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_class test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_class_full_specialization test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_class_partial_specialization test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_function_specialization test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_with_pointer test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_with_reference test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_template_with_reference_as_reference test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_trailing_return_type test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_two_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_two_simplest_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_typedef_is_not_old_style_c_function test/test_languages/testCAndCPP.py::Test_c_cpp_lizard::test_underscore test/test_languages/testCAndCPP.py::Test_cpp11_Attributes::test_class test/test_languages/testCAndCPP.py::Test_cpp11_Attributes::test_control_structures test/test_languages/testCAndCPP.py::Test_cpp11_Attributes::test_function test/test_languages/testCAndCPP.py::Test_cpp11_Attributes::test_function_parameters test/test_languages/testCAndCPP.py::Test_cpp11_Attributes::test_function_return_type test/test_languages/testCAndCPP.py::Test_cpp11_Attributes::test_namespace test/test_languages/testCAndCPP.py::Test_Preprocessing::test_content_macro_should_be_ignored test/test_languages/testCAndCPP.py::Test_Preprocessing::test_preprocessor_is_not_function test/test_languages/testCAndCPP.py::Test_Preprocessing::test_preprocessors_should_be_ignored_outside_function_implementation test/test_languages/testCAndCPP.py::Test_Big::test_trouble test/test_languages/testCAndCPP.py::Test_Dialects::test_cuda_kernel_launch