### Godot version

master [f7bc653cbe81018fe362472a0143b7153a52f929]

### System information

Arch Linux (GCC 13.2.1)

### Issue description

Output:

```
In file included from tests/test_main.cpp:118:
./tests/servers/rendering/test_shader_preprocessor.h: In function 'bool TestShaderPreprocessor::is_operator_char(unsigned char)':
./tests/servers/rendering/test_shader_preprocessor.h:55:34: error: variable 'const std::string operators' has initializer but incomplete type
   55 |         static const std::string operators = "<>=+-*/";
      |                                  ^~~~~~~~~
./tests/servers/rendering/test_shader_preprocessor.h:56:50: error: incomplete type 'std::string' {aka 'std::__cxx11::basic_string<char>'} used in nested name specifier
   56 |         return operators.find(c) != std::string::npos;
      |                                                  ^~~~
scons: *** [tests/test_main.linuxbsd.editor.dev.x86_64.san.o] Error 1
scons: building terminated because of errors.
```

### Steps to reproduce

Compile the project. Probably needs GCC 13.

### Minimal reproduction project

N/A
String code(
			"fragment() {\n"
			"  vec2 X = vec2(0);\n"
			"  #define X 1\n"
			"  #define y 2\n"
			"  #define B(x, y) C(x, y)\n"
			"  #define C(x, y) x##.##y\n"
			"  C(X, y) = B(X, y);\n"
			"}\n");
	String expected(
			"fragment() {\n"
			"  vec2 X = vec2(0);\n"
			"  X.y = 1.2;\n"
			"}\n");
	String result;
	ShaderPreprocessor preprocessor;
	CHECK_EQ(preprocessor.preprocess(code, String("file.gdshader"), result), Error::OK);
	
	CHECK_SHADER_NE(result, expected);
}
TEST_CASE("[ShaderPreprocessor] Concatenation sorting network") {
	String code(
			"fragment() {\n"
			"  #define ARR(X) test##X\n"
			"  #define ACMP(a, b) ARR(a) > ARR(b)\n"
			"  #define ASWAP(a, b) tmp = ARR(b); ARR(b) = ARR(a); ARR(a) = tmp;\n"
			"  #define ACSWAP(a, b) if(ACMP(a, b)) { ASWAP(a, b) }\n"
			"  float test0 = 1.2;\n"
			"  float test1 = 0.34;\n"