I think Georges make a good point that in the example G is not a statement.

Here is what I am thinking: If G is a statement, and define a function(G) = either 0 (false) or 1 (true). Now let's translate the problem into

function(G) = ?

The question mark means don't know if it is 0 (false) or 1(true).

Now let's look at G. What is G? where, G is the following statement:

function(G) = ?

So the problem becomes:

function[function(G)=?] = ?

In computer science this is called recursion. To determine the results, you need to call it in the next level in a program. Such causes infinity number of the recursive call and can't resolve it. This is the fundamental thing behind the example.

In mathematics, we should avoid such recursion for any statements. If doing so, I guess, human logic may have no flaw.