diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h
index 99b0bdc811ddbd182d539d505790794e74ecc6b0..954df14b5d7e9860ffd0605c7a8ca9615ac212bf 100644
--- a/src/plugins/cppeditor/cppeditorplugin.h
+++ b/src/plugins/cppeditor/cppeditorplugin.h
@@ -238,6 +238,7 @@ private slots:
     void test_quickfix_MoveFuncDefToDecl_FreeFuncToCpp();
     void test_quickfix_MoveFuncDefToDecl_FreeFuncToCppNS();
     void test_quickfix_MoveFuncDefToDecl_CtorWithInitialization();
+    void test_quickfix_MoveFuncDefToDecl_structWithAssignedVariable();
 
     void test_quickfix_AssignToLocalVariable_freeFunction();
     void test_quickfix_AssignToLocalVariable_memberFunction();
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index 7c4051d389ee477a62cdfe0e473298ff7f89dfb0..53c74826fd59adf33774ef9d9b0a41a7f8c484c2 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -3047,6 +3047,33 @@ void CppEditorPlugin::test_quickfix_MoveFuncDefToDecl_CtorWithInitialization()
     data.run(&factory);
 }
 
+/// Check: Definition should not be placed behind the variable. QTCREATORBUG-10303
+void CppEditorPlugin::test_quickfix_MoveFuncDefToDecl_structWithAssignedVariable()
+{
+    QByteArray original =
+        "struct Foo\n"
+        "{\n"
+        "    void foo();\n"
+        "} bar;\n\n"
+        "void Foo::fo@o()\n"
+        "{\n"
+        "    return;\n"
+        "}";
+
+    QByteArray expected =
+        "struct Foo\n"
+        "{\n"
+        "    void foo()\n"
+        "    {\n"
+        "        return;\n"
+        "    }\n"
+        "} bar;\n\n\n";
+
+    MoveFuncDefToDecl factory;
+    TestCase data(original, expected);
+    data.run(&factory);
+}
+
 /// Check: Add local variable for a free function.
 void CppEditorPlugin::test_quickfix_AssignToLocalVariable_freeFunction()
 {
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index a6d9dd1900b2809ba155356998387fd0cb42caf6..4802a3a3464ca3065197d43fecae192f4705e412 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -4387,7 +4387,7 @@ void MoveFuncDefToDecl::match(const CppQuickFixInterface &interface, QuickFixOpe
             const CppRefactoringFilePtr declFile = refactoring.file(declFileName);
             ASTPath astPath(declFile->cppDocument());
             const QList<AST *> path = astPath(s->line(), s->column());
-            for (int idx = 0; idx < path.size(); ++idx) {
+            for (int idx = path.size() - 1; idx > 0; --idx) {
                 AST *node = path.at(idx);
                 if (SimpleDeclarationAST *simpleDecl = node->asSimpleDeclaration()) {
                     if (simpleDecl->symbols && !simpleDecl->symbols->next) {